我需要一些帮助。
我正在尝试将信息存储在列表中。
例如,用户输入数字,年龄,地址和头发颜色......
我想在列表中创建列表以存储信息,如下所示:
[0] Number
----[0] Age
----------[0] Address
----------[1] Adrress
--------------[0] Hair Color
如果有更好的方法可以帮助我! 对于列表中的列表,我会非常困惑,但如果它是更好的解决方案,我没有问题。
答案 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);