2009-08-03 17 views
18

が、私は私のデータの一部を格納するための1つのリストを使用していますC#で一覧表示し、それがこの形式で完全に働いています:多次元瞬間

Item 
---------------- 
Joe Bloggs 
George Forman 
Peter Pan 

を今、私はこのリストに別の行を追加したいと思いますそれはそうと同じように機能するために:

NAME     EMAIL 
------------------------------------------------------ 
Joe Bloggs    [email protected] 
George Forman   [email protected] 
Peter Pan    [email protected] 

は、私は、リスト内のリストを作成するには、このコードを使用して試してみたが、このコードは、foreachループ内の別の方法で使用されます。

// Where List is instantiated 
List<List<string>> list2d = new List<List<string>> 

... 

// Where DataGrid instance is given the list 
dg.DataSource = list2d; 
dg.DataBind(); 

... 


// In another method, where all people add their names and emails, then are added 
// to the two-dimensional list 
foreach (People p in ppl.results) { 
    list.Add(results.name); 
    list.Add(results.email); 
    list2d.Add(list); 
} 
私は間違ってここに行くよ

Capacity Count 
---------------- 
16  16 
16  16 
16  16 
...  ... 

:私はこれを実行すると

は、私はこの結果を得ます。私は現在使用しているコードでどのように出力を得ることができますか?

+1

私は誤解しているかもしれませんが、これはリストのリストのようなものではなく、それぞれ2つのフィールドを持つレコードのリストです。もしそうなら、それはあなたがこれをモデリングする方法です。 –

答えて

40

foreach (People p in ppl.results) { 
    list.Add(results.name); 
    list.Add(results.email); 
    list2d.Add(list); 
} 

は、おそらくより多くのように読むべきでしょうか?

+3

私はそれが私のためにはうまくいかないと言っていたのですが、私はDataGrid変数を変更しましたが、今私はばかだと感じます。ありがとうございました! –

0

コードをさらに表示してください。

ループの外側の変数listを宣言して初期化すると、基本的に同じリストオブジェクトが再利用され、すべてが1つのリストに追加されます。

Capacityと.Countがどこに影響するのかを表示すると、どのようにそれらの値を取得できましたか?

+0

あなたのコードを表示する必要があります。自分のコードの頭や尾を作ることができない場合は、あなたがそれを投稿しない限り、私たちはできません。 –

4

可変結果はどこから来ますか?

このブロック:

あなたの代わりに List<List<string>>List<People>を使用していないのはなぜ
foreach (People p in ppl.results) { 
    var list = new List<string>(); 
    list.Add(p.name); 
    list.Add(p.email); 
    list2d.Add(list); 
} 
1

List<Person>またはHashSet<Person>を使用してください。 、コードに簡単に読むことが

public class Person { 
    public string Name {get; set;} 
    public string Email {get; set;} 
} 

var people = new List<Person>(); 

簡単:

31

は非常に多くのこのようなものをお勧めします。

+1

私はこの答えが好きです、私の場合、クラスはもっときれいで適切です:) – CodeIt

0

それは古いですが、私は私の2セントを追加しようと思いました... ない、それがうまくいくかどうかわからなく、KeyValuePairを使用してみてください:

List<KeyValuePair<?, ?>> LinkList = new List<KeyValuePair<?, ?>>(); 
LinkList.Add(new KeyValuePair<?, ?>(Object, Object)); 

あなたはこのようなものになってしまいます。

LinkList[0] = <Object, Object> 
LinkList[1] = <Object, Object> 
LinkList[2] = <Object, Object> 

のように...

0

何らかの理由であなたがお勧めのように、あなたはタプルを使用することができますPersonクラスを定義し、List<Person>を使用したくない場合は、S (C#7)のようにUCH:NameEmailメンバー名は任意です

var people = new List<(string Name, string Email)> 
{ 
    ("Joe Bloggs", "[email protected]"), 
    ("George Forman", "[email protected]"), 
    ("Peter Pan", "[email protected]") 
}; 

var georgeEmail = people[1].Email; 

、あなたがそれらを省略し、それぞれItem1Item2を使用してそれらにアクセスすることができます。

最大8つのメンバーのタプルが定義されています。

以前のバージョンのC#では、まだList<Tuple<string, string>>(またはValueTuple、好ましくはthis NuGet packageを使用)を使用できますが、カスタマイズされたメンバー名のメリットはありません。