Вы можете считать это отчетом об ошибке, однако мне любопытно, если я здесь ужасно неправ, или если есть объяснение от Эрика или кого-то еще в Microsoft.
Обновление
Это теперь опубликовано как ошибка в Microsoft Connect.
Описание
Рассмотрим следующий класс:
class A
{
public object B {
set { }
}
}
Здесь A.B
является доступным только для записи , но в остальном прекрасным свойством.
Теперь представьте, что мы присваиваем его внутри выражения :
Expression<Func<A>> 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<Func<A>> expr =
() => new A {
B = new object { }
};
}
}
class A {
public object B { set { } }
}
(И да, я сделал ударил его, работая над реальным проектомкт.) * 1 050 *