Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога
Особенности компилятора C#
Недавно Konstantin Yushtin писал о особенностях разбора выражений компиляторами C# и C++, а сегодня я столкнулся с такой особенностью - должен ли компилироваться такой код:
string[] list = new string[] {"",}
я бы сразу ответил что нет, ведь нет второго операнда в выражении инициализации.
Но!!! это компилируется под .NET 2.0 компилятор и остальные версии (пробовал для C# 3.5,3.0)
Изучив в дизасемблере код с запятой и без, пришел к выводу что запятая просто была проигнорирована. Такое поведение не зависит от типа переменных.
Сначала у меня была мысль что компилятор воспринимает запятую в качестве оператора последовательного выполнения, но подтверждения этого не получил, ни в коде IL, ни в интернете Smile, возможно компилятор производит оптимизацию и удаляет оператор последовательного выполнения или...

Вообщем вот такая интересная вещь, если кто-то знает ответ - поделитесь.Wink
Posted: Monday, January 14, 2008 3:16 PM від slash
Помічено як: ,

Коментарі

kpumuk сказав:

Подозреваю, это сделано для того, чтобы вот в таком коде:

int[,] list = new int[2,3]

{

{1, 3, 4},

{4, 1, 6},

};

не задумываться, где лепить запятые. <a href="http://msdn2.microsoft.com/en-us/library/aa664812(VS.71).aspx">Грамматика языка</a> такие конструкции разрешает:

array-initializer:

   {   variable-initializer-listopt   }

   {   variable-initializer-list   ,   }

# January 14, 2008 7:49 AM

slash сказав:

Да, прав грамматика позволяет, я этого не нашал, но странно зачем???

# January 14, 2008 8:06 AM

Mike Chaliy сказав:

new string[] {

"іваіва",

//"іваіваіва",

//"ііваіва"

}

так можна коментувати частини, якщо б це не підтримувалось то коментувати потрібно було б і кому.

# January 14, 2008 9:25 AM

Mike Chaliy сказав:

До речі, так само працює і енум.

# January 14, 2008 9:26 AM

kosinsky сказав:

Еще одно, кстати, в C++ тоже самое.

# January 14, 2008 10:23 AM

Brand сказав:

Нажаль в VB .NET такий фокус не працює :(

# January 15, 2008 5:11 AM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.