我正在调用一个返回包含 c# 匿名类型对象的列表变量的方法。例如:
List<object> list = new List<object>();
foreach ( Contact c in allContacts ) {
list.Add( new {
ContactID = c.ContactID,
FullName = c.FullName
});
}
return list;
我如何在我正在处理的代码中引用此类型属性,例如
foreach ( object o in list ) {
Console.WriteLine( o.ContactID );
}
我知道我的示例是不可能的,我只是这样写的,说明我需要准确识别匿名类型的每个属性。
谢谢!
解决方案:
不仅有一个答案是正确的和/或提出了一个可行的解决方案。我最终使用了 Greg 答案的选项 3。我还学到了一些关于 .NET 4.0 中的 dynamic
的非常有趣的东西!
最佳答案
您不能返回匿名类型的列表,它必须是object
的列表。因此,您将丢失类型信息。
选项 1
不要使用匿名类型。如果您尝试在多个方法中使用匿名类型,请创建一个真正的类。
选项 2
不要将您的匿名类型向下转换为 object
。 (必须在一个方法中)
var list = allContacts
.Select(c => new { c.ContactID, c.FullName })
.ToList();
foreach (var o in list) {
Console.WriteLine(o.ContactID);
}
选项 3
使用动态关键字。 (需要 .NET 4)
foreach (dynamic o in list) {
Console.WriteLine(o.ContactID);
}
选项 4
使用一些肮脏的反射。
关于c# - 使用 C# 匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935711/