Вы можете считать это отчетом об ошибке, однако мне любопытно, если я здесь ужасно ошибаюсь, или есть объяснение от Эрика или другого сотрудника Microsoft.
Теперь это опубликовано как ошибка в Microsoft Connect.
Рассмотрим следующий класс:
class A
{
public object B {
set { }
}
}
Здесь AB
- это только для записи , но в остальном прекрасное свойство.
Теперь представьте, что мы назначаем его внутри выражения :
Expression> expr =
() => new A {
B = new object { }
};
Этот код заставляет компилятор C # ( 3.5 .30729.4926 и 4.0 .30319.1) выплевывать
Внутренняя ошибка компилятора (0xc0000005 по адресу 013E213F): вероятная причина - «BIND».
и сбой.
Однако просто заменяет синтаксис инициализатора объекта ( {}
) конструктором. ( ()
) компилируется отлично .
using System;
using System.Linq.Expressions;
class Test {
public static void Main()
{
Expression> expr =
() => new A {
B = new object { }
};
}
}
class A {
public object B { set { } }
}
(И да, я сделал его, работая над реальным проектом.)