c# - 使用 C# 匿名类型

标签 c# dynamic .net-4.0 anonymous-types

我正在调用一个返回包含 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/

相关文章:

c - 堆栈上的动态内存分配

c# - DateTime.ParseExact FormatException 字符串未被识别为有效的 DateTime

.net-4.0 - 视觉 j# 在 .net 4 中不起作用

c# - 有没有办法用 ToolboxBitmap 实现真正的透明度?

c# - 为什么 ReadKey 在从 Git Bash 运行 .net-core 控制台应用程序时抛出异常?

c# - 创建一个对象并添加一个 List<string>

c# - 无论如何要将 long 转换为 int?

c# - 自发布包中的build文件夹中的文件不被第三方项目消耗

C# 如何等待返回 Task<dynamic> 的方法?

c# - 动态图像按钮点击事件没有被触发