首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请帮助我了解NewExpression.Members

请帮助我了解NewExpression.Members
EN

Stack Overflow用户
提问于 2010-10-17 12:20:42
回答 1查看 908关注 0票数 4

NewExpression.Members是否通知LINQ运行时如何将类型的构造函数参数映射到其属性?如果是这样的话,是否有属性来设置映射?我的想象是这样的:

代码语言:javascript
复制
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文档真正告诉您成员是如何被初始化的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-17 14:23:10

我有限的理解是,您通常不需要传递成员信息;参数(按位置)取自arguments参数。成员信息(我怀疑)是为了在处理匿名类型之类的事情时帮助一些内部API,匿名类型(在C#中)看起来像是由成员(像对象初始化器)初始化的,但实际上是由构造函数初始化的。这意味着像LINQ- to -SQL这样的东西将会看到一个构造函数的使用,然后(在查询的下一部分)访问obj.Name -它需要一种方法来理解这意味着“构造函数的第三个参数(实际上永远不会被调用),特别是对于像分组这样的东西。

所以这很好:

代码语言:javascript
复制
        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样式的绑定,还有一个单独的表达式。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3952030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档