使用C#匿名类型

Lor*_*nzo 26 c# dynamic anonymous-types .net-4.0

我正在调用一个返回包含ac#Anonymous Type对象的List变量的方法.例如:

List<object> list = new List<object>();
foreach ( Contact c in allContacts ) {
    list.Add( new {
        ContactID = c.ContactID,
        FullName = c.FullName
    });
}
return list;
Run Code Online (Sandbox Code Playgroud)

我如何在我正在处理的代码中引用此类型属性,例如

foreach ( object o in list ) {
    Console.WriteLine( o.ContactID );
}
Run Code Online (Sandbox Code Playgroud)

我知道我的样本是不可能的,我只是这样说,我需要确切地识别匿名类型的每个属性.

谢谢!

方案:

不只是其中一个答案是正确的和/或建议一个有效的解决方案.我最终使用了Greg选项3的答案.我dynamic在.NET 4.0 中学到了一些非常有趣的东西!

Gre*_*reg 35

您不能返回匿名类型的列表,它必须是一个列表object.因此,您将丢失类型信息.

选项1
不要使用匿名类型.如果您尝试在多个方法中使用匿名类型,则创建一个真正的类.

选项2
不要将您的匿名类型转发给object.(必须采用一种方法)

var list = allContacts
             .Select(c => new { c.ContactID, c.FullName })
             .ToList();

foreach (var o in list) {
    Console.WriteLine(o.ContactID);
}
Run Code Online (Sandbox Code Playgroud)

选项3
使用dynamic关键字.(需要.NET 4)

foreach (dynamic o in list) {
    Console.WriteLine(o.ContactID);
}
Run Code Online (Sandbox Code Playgroud)

选项4
使用一些脏反射.

  • +1选项1确实是在不同方法中重用该类型的最佳选择. (3认同)