Mein beschränktes Verständnis besagt, dass Sie normalerweise nicht die Mitgliederinformationen übergeben müssen; die Argumente werden (nach Position) aus dem Argumente
Parameter übernommen. Die Mitglieder-Informationen sind (vermute ich) dazu gedacht, einigen internen APIs zu helfen, wenn es um Dinge wie anonyme Typen geht, die in C# so aussehen, als würden sie nach Mitglied (wie bei einem Objekt-Initialisierer) initialisiert, tatsächlich aber durch Konstruktor initialisiert werden. Dies bedeutet, dass Dinge wie LINQ-to-SQL eine Konstruktor-Verwendung sehen und dann (im nächsten Teil der Abfrage) auf obj.Name
zugreifen - es muss eine Möglichkeit geben, zu verstehen, dass dies "den 3. Parameter des Konstruktors bedeutet (der nie tatsächlich aufgerufen wird). Insbesondere für Dinge wie Gruppierungen.
Also ist das in Ordnung:
var param = Expression.Parameter(typeof(string), "Name");
var body = Expression.New(typeof(Customer).GetConstructor(new[] {typeof(int), typeof(string)}),
Expression.Constant(1), param);
var func = Expression.Lambda>(body, param).Compile();
var cust = func("abc");
Wenn Sie sie benötigen, würde ich erwarten, dass sie relativ zu den "Argumenten" Ausdrücken positionell sind - also würden Sie (in einem Array) das Mitglied für die Id und den Namen übergeben. Beachten Sie, dass es auch einen getrennten Ausdruck für die Initialisierungsstil-Bindung gibt.