我们可以向引用匿名类型成员的匿名类型添加方法吗?

时间:2014-07-16 01:11:41

标签: c# anonymous-types

代码示例并不适用。它们旨在说明我尝试做我认为可行的方法。

// 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 = () => { }
};

2 个答案:

答案 0 :(得分:6)

Visual Studio 2013

  

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

实际上是的,你可以:MSDN Documentation

        var fName = "First Name";
        var lName = "Last Name";

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

        };

根据你想要TypeSafety的严重程度,你也可以这样做:

dynamic v = new ExpandoObject();

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

虽然老实说,我可能只是在方法的父类中使用这些属性和方法创建nested type。要么工作,内部类不会弄乱项目的其余部分,如果它只在那里使用。

答案 1 :(得分:2)

不,你不能。

原因是匿名类型是瞬态的,因此您可以以简洁的方式处理投影的结果,而无需创建显式类型来保存转换和投影一组数据的结果。 / p>