在C#中检索匿名对象的属性

时间:2014-11-20 14:45:40

标签: c# anonymous

我有以下代码

using System;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        List<object> list = new List<object>();
        list.Add(new {
            Value = 0
        });
        //Console.WriteLine(list[0].Value);
    }
}

是否有一种简单的方法来编写注释的代码行而不会导致编译时错误?我知道我可以使用dynamic关键字或为使用Reflection的Object类实现扩展方法,但是可能还有另一种更可接受的方法吗?

目标是避免创建一个类,因为它的唯一目的是存储数据。但同时仍然能够在程序中检索数据。这段代码最终将以web方式结束,这就是为什么我希望它首先是动态/匿名的。所有对象最终都具有相同的属性,因为它们将存储存储在表中的值,但稍后需要这些值用于其他计算。

1 个答案:

答案 0 :(得分:3)

  

是否有一种简单的方法来编写注释的代码行而不会导致编译时错误?

不按照您宣布列表的方式。如果您的列表仅包含该匿名类型的对象,则可以使用数组初始值设定项并将其转换为List<{anonymous type}>

var list = (new [] {
         new { Value = 0 }
     }).ToList();
Console.WriteLine(list[0].Value);

好处是你可以轻松添加到列表中,因为编译器将具有相同属性的匿名类型合并为一种类型:

list.Add(new {Value = 1});

Per Servy的评论,避免数组创建的方法就是:

public static List<T> CreateList<T>(params T[] items)
{
     return new List<T>(items);
}

用法:

var list = CreateList(new { Value = 0 });