Ответы пользователя по тегу C#
  • C# - Как можно сравнить время(DateTime)?

    @kttotto
    пофиг на чем писать
    var periodFrom = new DateTime(2017, 10, 5, 11, 30, 0);
    var periodTo = new DateTime(2017, 10, 5, 12, 30, 0);
    var periodNow = DateTime.Now;
    if (periodNow > periodFrom && periodNow < periodTo)
    {
    	Console.WriteLine("between");
    }
    	else
    {
    	Console.WriteLine("not between");
    }
    
    // 	timeFrom и timeTo выбирай вариант какой нужен
    var timeFrom = periodFrom.TimeOfDay;
    var timeTo = periodTo.TimeOfDay;
    
    var timeFrom1 = new TimeSpan(11, 30, 0);
    var timeTo1 = new TimeSpan(12, 30, 0);
    
    var timeNow = DateTime.Now.TimeOfDay;
    if (timeNow > timeFrom1 && timeNow < timeTo1)
    {
    	Console.WriteLine("between");
    }
    else
    {
    	Console.WriteLine("not between");
    }
    Ответ написан
    6 комментариев
  • Как обеспечить автономность программы от сервера?

    @kttotto
    пофиг на чем писать
    Если хотят учесть такие случаи, обычно используют очереди, готовые или самописные. Прежде чем отдать на сервер, документ в очередь, есть конект - очередь двигается, нет - очередь растет. Не в курсе предметной области, но если важен порядок нумерации, то может стоит нумерацию перенести на сервер? Сервер получил и сам пронумеровал исходя из каких то метаданных, которые придут с документом.
    Ответ написан
    Комментировать
  • Оператор || и == не может применятся к операндам типа стринг и инт?

    @kttotto
    пофиг на чем писать
    C# строготипизированный язык, это не js. Поэтому сравнить можно только строку со строкой и инт с интом.
    Ответ написан
    Комментировать
  • Какие технологии .NET стоит изучать сейчас?

    @kttotto
    пофиг на чем писать
    Зря Вы так о WPF ) Десктоп востребован до сих пор, загляните в вакансии. Но самое востребованное web конечно. Выше постом правильный список и приоритеты там как есть, упустили только мобильную разработку xamarin, но я это на последнее место поставил бы.

    Я бы посоветовал в web. Вакансий много, работы много, разработчиков не хватает.

    И еще плюсану за комент Толстый Лорри.
    Ответ написан
    1 комментарий
  • Как с помощью атрибутов применить метод ко всем другим методам класса на C#?

    @kttotto
    пофиг на чем писать
    c# custom attribute example

    Ну если и это не поможет, то есть класс Attribute, от которого надо отнаследоваться и сделать свою реализацию.
    public class MyCustomAttribute: Attribute
    {
        public string SomeProperty { get; set; }
    }

    Затем использовать
    [MyCustom(SomeProperty = "foo bar")]
    public class Foo
    {
    
    }
    Ответ написан
    Комментировать
  • Как написать метод, который будет выполняться перед каждым другим методом?

    @kttotto
    пофиг на чем писать
    Создаете свой атрибут, где внутри будет отрабатывать Ваш метод А и декарируете методы B,С,D,E этим атрибутом. Каждый раз, перед тем как метод будет запускаться, сначала отработает тот, что в атрибуте.
    Ответ написан
    7 комментариев
  • Почему unsafe код небезопасен и его редко используют в C#?

    @kttotto
    пофиг на чем писать
    Ваша задача нормально решается и без unsafe кода, без костылей и наворотов. Просто мыслить в терминах C++ и писать код на C# не совсем сопоставимо. Если хотите менять непосредственно значения, есть передача значений по ссылке, есть out и ref параметры, для 150 однотипных значений есть массивы, есть списки (и для разнотипных) . Просто нужно подумать в рамках идеологии C#.

    Хотя мне не совсем понятна проблема изменить переменные в классе и зачем для этого писать 150 методов. Класс это же объект, который передается по ссылке. Передав объект, Вы будете менять эти переменные у объекта как хотите. Если хотите передать куда-то непосредственно поле класса типа int и хотите, чтоб оно изменилось там, то передайте его как out/ref параметр.
    Ответ написан
    8 комментариев
  • Как зная частоту процессора определить скорость выполнения функции?

    @kttotto
    пофиг на чем писать
    Нет. Процессор, среда исполнения постоянно оптимизируют время выполнения на основе кучи нюансов, на основе предсказаний. Даже на одном железе можно говорить только о каких то средних показателях, запустив в разное время можно получить результат отличающийся в 2-3.
    Ответ написан
    Комментировать
  • Каким способом в .NET Core рекомендуется заполнять мастер страницу (_Layout.cshtml) динамическим контентом?

    @kttotto
    пофиг на чем писать
    Инжектить можно прямо на странице
    @inject ModelOrService ModelOrService;
    И в принципе в этом случае это может быть сервис, который будет работать с бд.

    Но когда мне надо в шаблоне сделать вывод динамик контента, я это реализую в js. Или важно это решить именно Разором.
    Ответ написан
    1 комментарий
  • Как проверить есть ли в массиве string симвоы 2 или 3 или 4 ... или 9?

    @kttotto
    пофиг на чем писать
    Отсеять или чем-то заменить - есть метод Replace()

    Соответственно
    result.Replace(num, string.Empty)
    Но т.к. этот метод делает замену только одного значения за раз, то придется либо сделать несколько раз Replace(...).Replace(..)... , либо написать свой метод, который сделает это в цикле. Какой-нибудь экстеншн:
    public static class StrExtantion
    	{
    		public static string ReplaceDigits(this string str, IEnumerable<int> digits)
    		{
    			var temp = string.Copy(str);
    			foreach (var digit in digits)
    			{
    				temp = temp.Replace(digit.ToString(), string.Empty);
    			}
    			return temp;
    		}
    	}

    А потом его использовать:
    var binResult = result.ReplaceDigits(Enumerable.Range(2,8))

    Но можно и одной строчкой сделать:
    string temp = string.Copy(result); 
    Enumerable.Range(2, 8).ToList().ForEach(x => temp = temp.Replace(x.ToString(), string.Empty));
    Console.WriteLine(temp);
    Ответ написан
  • Ошибка синтаксического анализатора(ASP.NET MVC), что делать?

    @kttotto
    пофиг на чем писать
    У Вас в коде Codebehind, а в доках везде CodeBehind. Это может быть причиной?
    Ответ написан
    Комментировать
  • Как в C# зарезервировать место под массив?

    @kttotto
    пофиг на чем писать
    Я так понимаю, что Вы просто не сочли нужным почитать за массивы в C#, т.к. эта информация написана в каждом туториале по ним.

    При объявлении массива, вы сразу указываете его размер. После его создания, Вы уже не сможете этот размер изменить (ничего "прибавить" Вы не сможете, можете только изменять значения элементов), именно потому, что под него уже выделена память. Если Вы что-то о массивах читали, то должны знать определение "Массив - это совокупность однотипных данных, расположенных непрерывно в памяти."

    На уровне кода массив это тот же список, у которого просто нет методов для увеличения его размера. Список Вы так же, при объявлении можете указать его начальный размер, но если его будет не хватать, то внутри отработает ресайз, обычно на величину текущего размера умноженного на два (есть варианты, когда размер прыгает по простым числам). Частый ресайз это не очень хорошо, т.к затрачивается время на резервирование нового пространства и копирования туда значений, плюс будет мусор для gc. Это касается List, т.к. он просто надстройка над Array.

    Есть другие виды списков, которые внутри являются связанными списками. Вообще C# достаточно богат видами списков, их желательно знать, чтоб правильно выбрать необходимый под свою задачу. И как я понял, Вы хотите массив, с возможностью изменять его размер. Тогда Вам нужен List, можете задать ему начальный размер new List(100). Увеличение будет происходить автоматом.
    Ответ написан
    Комментировать
  • Можно ли сохранить в ресурсах или в настройках приложения список (List)?

    @kttotto
    пофиг на чем писать
    Вариант первый, самый простой. Заранее в сетинге сделать поле типа стринг для списка. Список сереализовать в json и сохранять его туда. Ну при чтении читаете строку и десериализуете в свой список.
    var listStr = JsonConvert.SerializeObject(new List<Any>());
    Properties.Settings.Default.MyList = listStr;
    
    listStr = Properties.Settings.Default.MyList;
    var list = JsonConvert.DeserializeObject<List<Any>>(listStr);

    И вариант второй, вообще программно хорошо описан тут
    Ответ написан
    Комментировать
  • Какие есть готовые C# библиотеки для работы с геообластями, ну или хотя бы с геометрией?

    @kttotto Автор вопроса
    пофиг на чем писать
    Решил вопрос руками. Переводил в прямоугольные координаты, трансформировал, потом обратно. Погрешности правда есть, но в разы меньше, чем большинство других способов.
    Ответ написан
    Комментировать
  • Новичку учить EF или ADO.NET?

    @kttotto
    пофиг на чем писать
    EF проще в употреблении и в освоении я считаю тоже. Но с EF становится трудно, когда приложению требуется справляться с большой нагрузкой запросов, приходится выкручиваться, что-то придумывать, поэтому там чаще всего используют чистый ADO.NET.
    Ответ написан
    Комментировать
  • Насколько пригоден ASP.NET Core для стартового проекта?

    @kttotto
    пофиг на чем писать
    На днях сдаем достаточно крупный проект на asp.net core, который не только на тестах, но и уже в бою отработал. Причем это не первый сданный проект на core. Все замечательно работает. Каких то особых проблем, что это именно core, не возникало.
    Ответ написан
    3 комментария
  • Не компилируется code в execute. Как сделать цикл?

    @kttotto Автор вопроса
    пофиг на чем писать
    Вообщем, сделал запрос через POST и все нормально. Через GET так и не удалось отправить +/-, даже кодируя, vk возвращает ошибку.
    Ответ написан
    Комментировать
  • Почему GetUserManager() возвращает null?

    @kttotto Автор вопроса
    пофиг на чем писать
    Решение найдено.

    В файле Startup, строка
    app.UseWebApi(config);
    должна быть в самом низу, после всех ваших настроек.

    И пусть не смущает, что
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
    не использует параметр config и вроде как разницы нет. Вообщем разница есть и это имеет значение.
    Ответ написан
    Комментировать
  • Как в ASP.NET WebApi загрузить файл не записывая его на диск?

    @kttotto Автор вопроса
    пофиг на чем писать
    Вот решение:

    var provider = new MultipartMemoryStreamProvider();
    var result = await content.ReadAsMultipartAsync(provider);
    
    var stream = provider.Contents[0];  // если гарантированно один файл передавался, иначе - пройдитесь с помощью foreach
    var fileName = stream.Headers.ContentDisposition.FileName.Trim('"');
    var imgStream = await stream.ReadAsStreamAsync();
    var img = GetImageResize(Image.FromStream(imgStream), width, height);
    
    img.Save($"{basePath}\\{fileName}");


    Как заметили, просто вместо потока этого вида MultipartFormDataStreamProvider, создается этот MultipartMemoryStreamProvider.
    Ответ написан
    Комментировать
  • Я не умею готовить репозиторий или он просто не очень?

    @kttotto
    пофиг на чем писать
    В принципе пост выше ответил, но я тоже добавлю.

    Если Вы каждый запрос будете закрывать ToList(), то действительно, на каждый такое действие будет запрос в бд. Если используете LINQ, даже если будет несколько строк кода, сформируется один запрос к бд. И репозитории чаще оборачивают в один сервис, централизованный доступ к данным и работают уже с ним.

    Users.Find(id).Logs.Where(х => x.Date == date) или
    Logs.Where(x => x.UserId == userId && x.Date == date)

    В любом случае будет один запрос.

    И под каждый сложный запрос (часто востребованный) добавляют метод в интерфейс.

    Надо-не надо, это личное дело, если проектом только один человек занимается. Если его надо поддерживать, развивать, то приходится думать о гибкости. И не всегда меняют провайдера, могут уйти в чистый ado.net, если orm перестает тянуть какие то запросы. Поэтому без репозитория тут проблемно.
    Ответ написан
    Комментировать