我想创建一个临时类而不必构建具体类。工作流程将如下所示:
List<object> myList = new List<object>();
myList.Add(new() {prop1 = 33, prop2 = "test"});
myList.Add(new() {prop1 = 35, prop2 = "test2"});
//遍历myList,访问每个列表项的两个属性
有什么想法可以做这样的事情吗?
var v = new { Amount = 108, Message = "Hello" };
请参阅http://msdn.microsoft.com/en-us/library/vstudio/bb397696.aspx
static void Main(string[] args)
{
var myList = CreateList(new { prop1 = 33, prop2 = "test" });
myList.Add(new {prop1 = 35, prop2 = "test2"});
foreach (var entry in myList)
{
Console.WriteLine(entry.prop1);
Console.WriteLine(entry.prop2);
}
Console.ReadKey();
}
public static List<T> CreateList<T>(params T[] elements)
{
return new List<T>(elements);
}
我建议使用具体类型,但是如果你真的想要,你可以使用动态和匿名类型来保持对属性的访问。
List<dynamic> myList = new List<dynamic>();
myList.Add(new {prop1 = 33, prop2 = "test"});
myList.Add(new {prop1 = 35, prop2 = "test2"});
foreach(dynamic obj in myList) {
Console.WriteLine(obj.prop1);
}
但我真的不能说你这样做会得到什么。
当前阻止您访问成员的是object
. 您也许可以将其键入为匿名类型的数组:
var arr = new[] {
new { foo = 123, bar = "abc" },
new { foo = 456, bar = "def" }
};
foreach(var row in arr) {
Console.WriteLine(row.foo);
Console.WriteLine(row.bar);
}
如果您需要灵活地添加行,那么有一些技巧可以实现(基本上使用示例项来利用编译器类型推断,创建一个匿名类型的空列表):但老实说,你会很多最好只声明一个类并使用它。