C#-列表中的列表

C#-列表中的列表,c#,list,nested-lists,C#,List,Nested Lists,我需要一些帮助 我试图在列表中存储信息 例如,用户键入数字、年龄、地址和头发颜色 我想在列表中创建列表来存储信息,如下所示: [0] Number ----[0] Age ----------[0] Address ----------[1] Adrress --------------[0] Hair Color var users = new UserList(); var usr = new User{FirstName = "Steve", LastName="Ruben",

我需要一些帮助

我试图在列表中存储信息

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

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

[0] Number

----[0] Age

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

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

--------------[0] Hair Color
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);
如果有更好的方法,请帮助我

对于列表中的列表,我会非常困惑,但如果这是更好的解决方案,我没有问题。

将逻辑分组的数据存储为基本值数组并不是真正的解决方法。相反,只需存储对象列表。在您的示例中,对象可以简单到:

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>();
var people=newlist();
使用这种方法,您会立即注意到的一个关键好处是,
Person
的结构可以更改,而无需更改存储
Person
的任何集合。您可以添加/更改/删除属性,但它仍然只是一个
列表
。您只需更改使用您正在更改的组件的代码


另一个关键好处是,您可以将定义
人的所有逻辑封装在这个类中,这样其他代码就不必担心它了。因此,您不必重新编写相同的验证逻辑(例如,始终确保
Age
是一个有效的正数,诸如此类),您只需将其写入对象并应用于任何地方。正如埃里克·雷蒙德(Eric Raymond)曾经说过的,“智能数据结构和哑代码比其他方法工作得更好。”

将逻辑分组的数据存储为原始值数组并不是真正的解决方法。相反,只需存储对象列表。在您的示例中,对象可以简单到:

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>();
var people=newlist();
使用这种方法,您会立即注意到的一个关键好处是,
Person
的结构可以更改,而无需更改存储
Person
的任何集合。您可以添加/更改/删除属性,但它仍然只是一个
列表
。您只需更改使用您正在更改的组件的代码


另一个关键好处是,您可以将定义
人的所有逻辑封装在这个类中,这样其他代码就不必担心它了。因此,您不必重新编写相同的验证逻辑(例如,始终确保
Age
是一个有效的正数,诸如此类),您只需将其写入对象并应用于任何地方。正如Eric Raymond曾经说过的,“智能数据结构和愚蠢的代码比其他方式工作得更好。”

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

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>{
}

您需要一个类结构,请看以下示例:

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>{
}

为什么不上课呢?然后你可以有一个包含内容的类的列表。列表并不意味着像你的例子那样保存结构化数据。@Pierre Lucpinoult,你能告诉我怎么做吗?@xbonez那么什么是最好的呢?你几乎找不到比类更基本的东西了;从学习C#(或任何OO语言)开始,您将了解如何。。你可以找到一堆在线教程和资源为什么不去上课?然后你可以有一个包含内容的类的列表。列表并不意味着像你的例子那样保存结构化数据。@Pierre Lucpinoult,你能告诉我怎么做吗?@xbonez那么什么是最好的呢?你几乎找不到比类更基本的东西了;从学习C#(或任何OO语言)开始,您将了解如何。。你可以找到一堆在线教程和资源