You may consider this a bug report, however I'm curious if I am terribly wrong here, or if there is an explanation from Eric or someone else at Microsoft.
Update
This is now posted as a bug on Microsoft Connect.
Description
Consider the following class:
class A
{
public object B {
set { }
}
}
Here, A.B
is a write-only but otherwise fine property.
Now, imagine we assign it inside of expression:
Expression<Func<A>> expr =
() => new A {
B = new object { }
};
This code makes C# compiler (both 3.5.30729.4926 and 4.0.30319.1) spit out
Internal Compiler Error (0xc0000005 at address 013E213F): likely culprit is 'BIND'.
and crash.
However, merely replacing object initializer syntax ({ }
) with a constructor (( )
) compiles just fine.
Full code for reproduction:
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 { } }
}
(And yes, I did hit it working on a real project.)