Ответы пользователя по тегу C#
  • Рекурсивный метод для поиска наибольшего элемента массива?

    @hax
    junior developer
    По вашей реализации:
    1) Конструкцию типа list.Count() == 0 можно заменить спокойно вызовом list.Any()
    2) Почему возвращается 0, когда в коллекции нету элементов? Разве это не исключительная ситуация? Может стоит бросать ошибку?
    3) Правильно ли я понимаю, что в этой строчке опечатка: int subMax = count(list.Skip(1));. Предполагаю, что вместо вызова метода count() должен вызываться метод Max()?
    4) Ваш алгоритм неправильно отработает для случая, когда коллекция содержит только один элемент.
    5) Постоянные вызовы list.ToArray() создают лишние объекты в памяти, используйте просто list.ElementAt(index) для получения нужного элемента в коллекции с указанным индексом.

    По поводу реализации из книги: в целом, большой разницы между вашей реализации и реализацией из книги я не вижу, т.к. они используют один и тот же принцип рекурсивности. По факту, вы просто заменили тернарный оператор на if и зачем-то убрали остальные проверки. В этом плане алгоритм из книги лучше, т.к. он, во-первых он выбрасывает исключение для пустой коллекции, а во-вторых он правильно отрабатывает для коллекции, состоящей только из одного или двух элементов. Единственное только что меня смущает, так это постоянные вызовы First(), Skip(), Take(). Как по мне, было бы лучше загнать результаты вызовов этих методов единожды в одну переменную и работать уже непосредственно с этой переменной
    Ответ написан
    Комментировать
  • Как можно объединить два Expression'a в один для получения данных из Entity Framework Core?

    @hax Автор вопроса
    junior developer
    Спасибо Илья за ссылку на доклад. Благодаря нему я нашёл ошибку (оказывается нельзя просто так взять и соединить два экспрешена). Накидал небольшой метод, который соединяет два экспрешена логическим "И" (&&):
    public static Expression<T> Combine<T>(
        Expression<T> firstExpression,
        Expression<T> secondExpression)
    {
        if (firstExpression is null)
        {
            return secondExpression;
        }
    
        if (secondExpression is null)
        {
            return firstExpression;
        }
    
        var invokedExpression = Expression.Invoke(
            secondExpression,
            firstExpression.Parameters);
    
        var combinedExpression = Expression.AndAlso(firstExpression.Body, invokedExpression);
    
        return Expression.Lambda<T>(combinedExpression, firstExpression.Parameters);
    }
    Ответ написан
  • Как программно получить список всех свойств устройства в Device Manager'e?

    @hax Автор вопроса
    junior developer
    Ответ написан
    Комментировать
  • Нужно написать приложение работающее не заметно для пользователя windows 7?

    @hax
    junior developer
    string applicationPath = ""; // путь к приложению
    var process = new Process()
    {
       StartInfo = new ProcessStartInfo
       {
          WindowStyle = ProcessWindowStyle.Hidden, // скрывает UI процесса, виден в диспетчере задач
          FileName = _applicationPath 
       }
    };
    process.Start();
    Ответ написан
    Комментировать