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>();

このアプローチですぐに気付く主な利点の 1 つは、Personを格納するコレクションを変更せずに の構造を変更できることPersonです。プロパティを追加/変更/削除できますが、それは単なるList<Person>. 変更するコンポーネントを使用するコードを変更するだけで済みます。

もう 1 つの重要な利点は、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 に答える