获取信息的对象列表

时间:2011-06-08 20:13:25

标签: c# list

我仍然无法从列表中获取数据。我的列表包含一个对象列表。 (如果这是有道理的)

我认为这只是一个语法问题。但我需要到达对象级别来调用属性。

所以这是我列表的结构,当我开始考虑调试器,让你知道它有多深。 Name Value

ItemList count = 40
-> [0] count = 1
--->[0] {namespace.class}
----> Propties Values

  现在,我可以看到这些属性的属性和值。

访问这些属性的语法是什么?

我将描述我的结构是如何设置的。所以这是我的“组件对象”列表

List<Component> SYNCItems = new List<Component>();

所有属性都分配给对象并添加到此列表中。

现在列表SyncItems正被添加到ItemsList中以及其他项目。

List<Object> ItemsList = new List<object>();

ItemsList.Add(SYNCItems);

所以它就像一个多数组列表。

这有帮助吗?

5 个答案:

答案 0 :(得分:1)

(编辑以回应最新消息)

您正在使用List<object>来存储应该是List<List<Component>>的内容。组件列表可以放在对象列表中,但它将作为对象存储,您将无法再以列表的形式访问它而不会退回。

更改为以下内容:

List<Object> ItemsList = new List<object>();

var ItemsList = new List<List<Component>>(); // you can use type inference to save you some typing

(如果您使用的是C#2.0,请指定类型名称而不是var,如下所示:)

List<List<Component>> ItemsList = new List<List<Component>>();

然后,您应该可以通过ItemList[0][0].Property或foreach迭代等访问内部列表。

答案 1 :(得分:1)

如果您只想读取数据,可以获得内部列表。

var innerList = ItemList.SelectMany(i => ((List<Component>)i).ToList());

然后您可以访问属性:

foreach(var prop in innerList)
      //do something with prop.myProperty

编辑 - 更新了回答编辑问题的答案。使用List<Component>代替List<object>

答案 2 :(得分:1)

首先误读了这个问题。假设你的意思是:

List<List<Person>>;

以下是一个例子:

public class Person
{
    public string Name {get;set;}
}

List<List<Person>> superHeroes = new List<List<Person>>();
List<Person> persons = new List<Person>();

Person p = new Person {Name = "Superman"};
Person p2 = new Person {Name = "Batman"};
Person p3 = new Person {Name = "Spiderman"};

persons.Add(p);
persons.Add(p2);
persons.Add(p3);

superHeroes.Add(persons);

string batmanName = superHeroes[0][0].Name; //returns "Superman"

当您说您的列表包含对象列表时,您的意思是列表中的列表还是仅包含多个对象的列表。

答案 3 :(得分:0)

怎么样

  ItemList.ElementAt(0).ElementAt(0).Properties

或者那种效果。

我认为您想要访问ElementAt(int index)

的列表元素

答案 4 :(得分:0)

啊,我现在看到你的问题了。干得好。试试这个:

        List<SomeClass> SYNCItems = new List<SomeClass>();

        var obj1 = new SomeClass() { SomeProperty = "test" };
        SYNCItems.Add(obj1);

        var obj2 = new SomeClass() { SomeProperty = "test" };
        SYNCItems.Add(obj2);

        List<Object> ItemsList = new List<object>();

        ItemsList.Add(SYNCItems);


        var list = (ItemsList[0]) as List<SomeClass>;

        Console.WriteLine(list[0].SomeProperty);
        Console.WriteLine(list[1].SomeProperty); 

只是为了完整性,这里是SomeClass。 :)

public class SomeClass
{
     public string SomeProperty { get; set; }
}