Search
Write a publication
Pull to refresh
4
0
Всеволод @VsevKokhan

User

Send message

Вприницпе согласен, момент с захватом переменной в цикле (как это в фориче) более подробно разобрал в статье.Спасибо за подсказку с таким неочивидным моментом

В этом случае стоит только запомнить, что сейчас форич возвращает нам каждый раз новую переменную, в отличии от for. Поэтому под капотом именно в цикле форич будет создаваться класс, метод которого мы сделали как лямбду. И каждый экземпляр этого класса ссылается на свое значение.

try
    {
      while (enumerator.MoveNext())
      {
        Program.<>c__DisplayClass0_0 cDisplayClass00 = new Program.<>c__DisplayClass0_0();
        cDisplayClass00.i = enumerator.Current;
        action = (Action) Delegate.Combine((Delegate) action, (Delegate) new Action((object) cDisplayClass00, __methodptr(<Main>b__0)));
      }
    }
    finally
    {
      enumerator.Dispose();
    }

Вещь неочивидная, но тут только стоит помнить о переменной в фориче, как она возвращается + во что раскроется лямбда.

class Program
{
    static  void Main(string[] args)
    {
        Strange strange = new("third");
    }
}
class Strange {
    public static Strange s = new Strange("first");

    static Strange(){
        Console.WriteLine("second");
    }

    public Strange(string str){
        Console.WriteLine(str);
    }
}

В таком случае у вас все будет по порядку - сначала идет работа стат конструктора (поля + сам конструктор). И как раз поле для статики будет первой (у нее сработает конструктор 1 раз только тк это статика). После стат конструктора идет обычный конструкор уже нашего класса. Всё логично и правильно. Главное не делать поле такого же класса обыным (не статик), а то стек упадёт

спасибо за подсказку, в статье этот момент исправил

Подскажите подробнее, что вас именно смутило? Просто я копирую все что связано со сборкой. Нугет пакеты после рестора уйдут в свою папку, которую я не трогаю

Достаточно. Но чтобы все было «более читаемым» и можно было сразу определить на каком именно моменте что то пошло не так - делают примерно как описано в статье. Даже райдер делает автоматический докерфайл примерно таким

спасибо за комментарии, что решил нужным - учёл. А так как раз собирался комплексом поместить работу с ивентами в отдельную статью, чтобы лучше видеть разницу, что и как где работает\используется

При вызове комбинированного делегата выполняются все делегаты в цепочке, но результат от последнего делегата будет возвращён. Это базовое знание должно уже присутствовать при чтении этой статьи, поэтому и не писал нигде, что статья для ребят, которые только начали изучать шарпы..

low-level c# *

случайно написал про IL)

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer
From 30,000 ₽
C#
Docker
Git
REST
RESTful API
ASP.Net
ASP.NET MVC
ASP.NET Web API
Entity Framework
.NET