これはバグ報告だと思われるかもしれませんが、ここで私がひどく間違っているのか、それとも Eric や 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 の両方) が出力されます。
内部コンパイラ エラー (アドレス 013E213F の 0xc0000005): 原因はおそらく '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 { } }
}
(そして、はい、実際のプロジェクトに取り組んでいます。)