Ошибка компилятора С#? Синтаксис инициализатора объекта, используемый для свойства только для записи в выражении, приводC#

Место общения программистов C#
Anonymous
Ошибка компилятора С#? Синтаксис инициализатора объекта, используемый для свойства только для записи в выражении, привод

Сообщение Anonymous »

Вы можете считать это отчетом об ошибке, однако мне любопытно, ошибаюсь ли я здесь, или есть ли объяснение от Эрика или кого-то еще из Microsoft.
Обновить< /h2>
Теперь это сообщение об ошибке в Microsoft Connect.
Описание
Рассмотрим следующий класс:

Код: Выделить всё

class A
{
public object B {
set { }
}
}
Здесь A.B — это доступное только для записи, но в остальном прекрасное свойство.

Теперь представьте, что мы назначьте его внутри выражения:

Код: Выделить всё

Expression expr =
() => new A {
B = new object { }
};
Этот код заставляет компилятор C# (оба 3.5.30729.4926 и 4.0.30319.1) выплевывать

Внутренняя ошибка компилятора (0xc0000005 по адресу 013E213F): вероятная причина – «BIND».

и произойдет сбой.
Однако просто замена синтаксиса инициализатора объекта () с помощью конструктора () компилируется отлично[/b].
Полный код для воспроизведения:

Код: Выделить всё

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 { } }
}
(И да, я добился успеха, работая над реальным проектом.)

Подробнее здесь: https://stackoverflow.com/questions/647 ... roperty-in

Вернуться в «C#»