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

Вы можете считать это отчетом об ошибке, однако мне любопытно, если я здесь ужасно ошибаюсь, или есть объяснение от Эрика или другого сотрудника 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 { } }
}

(И да, я сделал его, работая над реальным проектом.)

26
задан Dan Abramov 7 July 2011 в 16:43
поделиться