NewExpression.Members是否通知LINQ运行时如何将类型的构造函数参数映射到其属性?如果是这样的话,是否有属性来设置映射?我的想象是这样的:
public class Customer
{
public Customer(int id, string name)
{
Id = id;
Name = name;
}
[CtorParam("id")]
public int Id { get; set; }
[CtorParam("name")]
public string Name { get; set; }
}但是,没有一个MSDN文档真正告诉您成员是如何被初始化的。
发布于 2010-10-17 14:23:10
我有限的理解是,您通常不需要传递成员信息;参数(按位置)取自arguments参数。成员信息(我怀疑)是为了在处理匿名类型之类的事情时帮助一些内部API,匿名类型(在C#中)看起来像是由成员(像对象初始化器)初始化的,但实际上是由构造函数初始化的。这意味着像LINQ- to -SQL这样的东西将会看到一个构造函数的使用,然后(在查询的下一部分)访问obj.Name -它需要一种方法来理解这意味着“构造函数的第三个参数(实际上永远不会被调用),特别是对于像分组这样的东西。
所以这很好:
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<Func<string, Customer>>(body, param).Compile();
var cust = func("abc");如果你确实需要它们,我希望它们是相对于“参数”表达式的位置-所以你可以(在一个数组中)传入id和name的成员。请注意,对于intialzer样式的绑定,还有一个单独的表达式。
https://stackoverflow.com/questions/3952030
复制相似问题