Ответы пользователя по тегу C#
  • "Несогласованность по доступности" и "недоступен из-за его уровня защиты". Как исправить?

    @lil_Toady
    Подобное возникает когда область видимости типа аргумента ниже области видимости самого метода. Возможно класс ModelAnimalpark у вас помечен как internal, или никак не помечен (по дефолту internal), а класс AnimalEdit и его конструктор публичные.
    Ответ написан
    Комментировать
  • Как скачать изображение и не получить Bad Request: wrong URL host?

    @lil_Toady
    Может дело в том что 192.168.10.40 - это адрес внутри локальной сети, а не внешний. Поэтому вы на него можете зайти, а бот нет.
    Ответ написан
  • List c# нужно найти не одинаковые элементы, как это сделать?

    @lil_Toady
    Думаю подойдет Except:
    var diff = current.Except(expected);

    Это выдаст элементы из current, которых нет в expected.

    Можно так же и в обе стороны, чтобы получить элементы которые не пересекаются из обоих списоков:
    var diff = current.Except(expected).Union(expected.Except(current));


    Если для сравнения элементов нужна какая-то особая логика, то нужно будет так же внедрить IEqualityComparer и передавать аргументом в Except.
    Ответ написан
    1 комментарий
  • Кто разъяснит строчку из C# кода?

    @lil_Toady
    Методу Enum.Parse нужно знать тип enum'а, чтобы понять список возможных значений. Для значений не входящих в перечисление будет выкинуто исключение ArgumentException.

    В перечисление DayOfWeek соответственно входят входят Sunday, Monday, Tuesday, Wednesday, Thursday, Friday и Saturday, если введенная вами строка в консоль не будет соответствовать одному из этих значений, то получите исключение.

    В последних версиях стандарта это же самое можно достичь более простым способом, передавая нужный тип как generic аргумент, и не приходится делать приведение типа:
    favDay = Enum.Parse<DayOfWeek>(Console.ReadLine());

    Думаю такая запись и проще для понимания при чтении кода :)
    Ответ написан
  • В чем смысл метода CreateScope, какие преимущества он дает?

    @lil_Toady
    Есть три типа срока жизни объектов в DI контейнере (по крайней мере от Microsoft, который тут рассматривается):
    - Singleton - Объект создается только один раз на срок жизни программы, соответственно все кто его запросил получат одну и ту же сущность;
    - Scoped - Объект создается только один раз в пределах скоупа, и эта сущность будет передаваться всем кто ее запрашивал в пределах этого скоупа , а после этого удаляется (и вызывается Dispose, если внедрен интерфейс IDisposable);
    - Transient - Объект создается по каждому запросу, то есть DI всегда будет подсовывать новую сущность;

    Это механизм изоляции и ограничения срока жизни объекта. Если рассматривать ASP.NET, то каждый запрос к серверу обрабатывается в своем скоупе.
    Ответ написан
    Комментировать
  • Тип данных аналогичный таблице в C#?

    @lil_Toady
    Все верно, вам подойдет struct или class, чтобы описать одну запись (строку), разница между ними будет что первое - value type, не может быть null. И далее любая коллекция, даже простой массив.

    Предположим что вы описали сущность так:
    class Item
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public DateTime Time { get; set; }
    }


    для простоты используем List - простейший динамический список, можно добавлять, удалять и т.п.:
    var timeTable = new List<Item>
    {
      new Item { Id = 1, Title = "Иван Сергеевич", Time = DateTime.Parse("20.05.2019 18:45") },
      new Item { Id = 2, Title = "Петр Николаевич", Time = DateTime.Parse("20.05.2019 16:45") },
    };


    И теперь через Linq (using System.Linq;) можно работать с этими данным, работает на любой коллекции или массиве, внедряющих интерфейс IEnumerable, и предоставляет различные методы типа Where, Min, Max, OrderBy и т.п.
    var ordered = timeTable.OrderBy(item => item.Time); // Получили IEnumerable<Item>  отсортированный по Time


    P.S. Такая запись, более похожая на SQL тоже возможна, но думаю подход с методами будет все же более удобным
    var ordered = from item in timeTable orderby item.Time ascending select item;
    Ответ написан
    2 комментария
  • Как DI резолвится в .ctor'е контроллера?

    @lil_Toady
    Не очень понятен вопрос.
    Если про то как DI понимает какую имплементацию использовать - все просто, вы сами ее и указываете для конкретного интерфейса.
    А если вам интересно как DI понимает что передать в конструктор: через рефлексию, в Type есть метод GetConstructors() - получить список ConstructorInfo, описывающих каждый из задекларированных конструкторов. Далее можно получить список параметров (ParameterInfo) через GetParameters() и найти тот, все типы параметров которого известны DI, инстанциировать их и затем уже инстациировать запрошеный класс, как например контроллер, используя, например, Activator.CreateInstance куда передается тип нужного нам класса и список аргументов.
    Ответ написан
    2 комментария