1

我想创建一个临时类而不必构建具体类。工作流程将如下所示:

List<object> myList = new List<object>();
myList.Add(new() {prop1 = 33, prop2 = "test"});
myList.Add(new() {prop1 = 35, prop2 = "test2"});

//遍历myList,访问每个列表项的两个属性

有什么想法可以做这样的事情吗?

4

3 回答 3

4
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);
    }
于 2013-10-23T22:39:14.053 回答
3

我建议使用具体类型,但是如果你真的想要,你可以使用动态和匿名类型来保持对属性的访问。

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);
}

但我真的不能说你这样做会得到什么。

于 2013-10-23T22:43:15.587 回答
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);
}

如果您需要灵活地添加行,那么有一些技巧可以实现(基本上使用示例项来利用编译器类型推断,创建一个匿名类型的空列表):但老实说,你会很多最好只声明一个类并使用它。

于 2013-10-23T22:39:42.843 回答