可以向匿名类型添加一个方法,该方法引用匿名类型的成员吗?

本文关键字:方法 类型 引用 成员 添加 可以向 一个 | 更新日期: 2023-09-27 18:13:03

代码示例并不意味着工作。它们是为了说明我已经尝试做我认为可能的事情的方法。

// Error: The name First does not exist...
var Contact = new
{
    First = "",
    Last = "",            
    FullName = First + " " + Last
};
// Error: Cannot assign lambda expression to anonymous type property
var Contact = new
{
    First = "",
    Last = "",
    FullName = () => { }
};

可以向匿名类型添加一个方法,该方法引用匿名类型的成员吗?

Visual Studio 2013 :

匿名类型包含一个或多个公共只读属性。没有其他类型的类成员(如方法或事件)是有效的。用于初始化属性的表达式不能为空,匿名函数,或指针类型。

实际上你可以:MSDN文档:

        var fName = "First Name";
        var lName = "Last Name";
        var t = new
        {
            FirstName = "First Name",
            LastName = "Last Name",
            FullName = new Func<string>(() => { return fName + lName; })
        };

根据你有多想要typessafety,你也可以这样做:

dynamic v = new ExpandoObject();
v.FirstName = "FName";
v.LastName = "LName";
v.FullName = new Func<string>(() => { return v.FirstName + " " + v.LastName; });

尽管老实说,我可能只会在方法的父类中使用这些属性和方法创建一个嵌套类型。这两种方法都可以,并且如果内部类只在那里使用,它不会弄乱项目的其余部分。

不行。

原因是匿名类型是暂时的,因此您可以以简洁的方式处理投影的结果,而不必创建显式类型来保存转换和投影一组数据的结果。