Я разрабатываю приложение С# Winform в среде .NET CF 3.5.
Я понимаю, что в приведенном ниже примере возникает исключение TypeInitializationException.
static int [] ArrayB = new int [ArrayA.Length];
static int [] ArrayA = new int [] {1, 2, 3, 4};
Это связано с тем, что ArrayA имеет значение null при объявлении ArrayB. Следовательно, если вы измените его, как показано ниже, ошибки не будет.
static int [] ArrayA = new int [] {1, 2, 3, 4};
static int [] ArrayB = new int [ArrayA.Length];
Так почему же следующий пример не вызывает исключение TypeInitializationException?
static int [] ArrayB = new int [len];
static int len = 4;
ArrayB объявляется перед len. Я думаю, что должна возникнуть ошибка, потому что len еще не инициализирован при объявлении ArrayB.
Но почему ошибка не возникает?





Даже если он не генерирует исключение, длина ArrayB по-прежнему равна нулю (значение по умолчанию для int). Вот объяснение от кого-то: «Причину неожиданного значения можно найти в Спецификации языка C#. Это окончательная документация по синтаксису и использованию C#. В документе указано, что статические поля никогда не могут рассматриваться как неинициализированные значения. перед применением значения возвращается значение по умолчанию для их типа данных.Для целочисленных значений это 0. Спецификация языка C# также говорит нам, что когда статические поля инициализируются путем применения значения в их объявлении, как мы сделали выше, они установлены в том порядке, в котором они появляются в коде. Это означает, что при вычислении значения ArrayB мы используем два неинициализированных значения, каждое из которых дает нулевой результат». Для получения дополнительной информации: Док
Спасибо. Это очень полезно для меня.