C# - 列出内部列表

时间:2013-10-29 18:27:43

标签: c# list nested-lists

我需要一些帮助。

我正在尝试将信息存储在列表中。

例如,用户输入数字,年龄,地址和头发颜色......

我想在列表中创建列表以存储信息,如下所示:

[0] Number

----[0] Age

----------[0] Address

----------[1] Adrress

--------------[0] Hair Color

如果有更好的方法可以帮助我! 对于列表中的列表,我会非常困惑,但如果它是更好的解决方案,我没有问题。

2 个答案:

答案 0 :(得分:8)

将逻辑分组数据存储为原始值数组并不是真正的方法。相反,replace the array with an object只存储对象列表。在您的示例中,对象可以像以下一样简单:

class Person
{
    public int Number { get; set; } // it's not clear what this value means
    public int Age { get; set; }
    public string Address { get; set; }
    public string HairColor { get; set; }
}

您可以向此对象添加更多属性,逻辑,验证,强类型枚举(对于HairColor)等。维护这个集合很容易:

var people = new List<Person>();

使用此方法您会立即注意到的一个主要好处是Person的结构可以更改,而无需更改存储Person的任何集合。您可以添加/更改/删除属性,它仍然只是List<Person>。您只需要更改使用您正在更改的组件的代码。

另一个关键的好处是你可以封装在这个类中定义Person的所有逻辑,因此其他代码不需要担心它。因此,不必重新编写相同的验证逻辑(例如,总是确保Age是一个有效的正数,就像那样),你可以把它写在对象上,并且它可以在任何地方应用。正如Eric Raymond曾经说过的那样,“智能数据结构和愚蠢的代码比其他方式更好。”

答案 1 :(得分:4)

你需要一个类结构来看看这个例子:

public enum AddressType{
     Work,
     Home,
     Other
}

class Address{
    public AddressType AddressType{get;set;}
    public AddressLine1 {get;set;}
    public AddressLine2 {get;set;}
    public string City{get;set;}
    public string State{get;set;}
}

class User
{
    public int Age{get;set;}
    public string FirstName{get;set;}
    public string LastName{get;set;}
    public string HairColor{get;set;}
    public List<Address> AddressList{get;set;}
    public User(){
         AddressList = new List<Address>();
    }
}

class UserList:List<User>{
}

然后你就可以使用这样的代码:

var users = new UserList();
var usr = new User{FirstName = "Steve", LastName="Ruben", Age = 32, HairColor = "Brown"};
usr.AddressList.Add(new AddressList{AddressLine1 = "Address ln 1", AddressLine2 = "Address ln 2", City = "Some Place", State = "WI", AddressType = AddressType.Home});
users.Add(usr);