我有以下代码
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方式结束,这就是为什么我希望它首先是动态/匿名的。所有对象最终都具有相同的属性,因为它们将存储存储在表中的值,但稍后需要这些值用于其他计算。
答案 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 });