我想创建一个临时类而不必构建具体类。工作流程如下所示:
List<object> myList = new List<object>();
myList.Add(new() {prop1 = 33, prop2 = "test"});
myList.Add(new() {prop1 = 35, prop2 = "test2"});
//遍历myList,访问每个列表项的两个属性
有什么想法可以做到这一点吗?
答案 0 :(得分:2)
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);
}
答案 1 :(得分:2)
阻止您访问成员的事情是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);
}
如果你需要灵活地添加行,那么有一些技巧可以允许(基本上使用一个示例项来利用编译器类型推断,创建一个匿名类型的空列表):但说实话你是只是声明一个类并使用它会好很多。
答案 2 :(得分:2)
我建议使用具体类型,但是如果您真的需要,可以使用动态和匿名类型来访问属性。
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);
}
但我无法真实地说出你通过这样做获得了什么。