Ошибка компилятора С#? Синтаксис инициализатора объекта, используемый для свойства только для записи в выражении, привод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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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