1

我需要一些帮助。

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

例如,用户输入号码、年龄、地址和头发颜色……

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

[0] Number

----[0] Age

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

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

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

如果有更好的方法来做到这一点,请帮助我!
使用列表中的列表我会很困惑,但如果它是更好的解决方案,我没有问题。

4

2 回答 2

8

将逻辑分组的数据存储为原始值数组并不是真正的解决方法。相反,用一个对象替换数组并只存储对象列表。在您的示例中,该对象可能很简单:

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可以更改的结构,而无需更改存储Persons 的任何集合。您可以添加/更改/删除属性,它仍然只是一个List<Person>. 您只需要更改使用您正在更改的组件的代码。

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

于 2013-10-29T18:36:27.583 回答
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);
于 2013-10-29T18:36:57.513 回答