2012-06-15 27 views
6

私はC#でリストを使用する方法を学ぼうとしています。そこには多くのチュートリアルがありますが、実際にはレコードを含むリストを表示する方法については説明していません。私がメッセージボックスに値を表示したいリストに保存されている値を表示するにはどうすればよいですか?

class ObjectProperties 
{ 
    public string ObjectNumber { get; set; } 
    public string ObjectComments { get; set; } 
    public string ObjectAddress { get; set; } 
} 

List<ObjectProperties> Properties = new List<ObjectProperties>(); 
ObjectProperties record = new ObjectProperties 
    { 
     ObjectNumber = txtObjectNumber.Text, 
     ObjectComments = txtComments.Text, 
     ObjectAddress = addressCombined, 
    }; 
Properties.Add(record); 

は、ここに私のコードです。今私は情報がリストに入っていることを確認しています。また、リスト内の値を見つけてそれに関連する他の情報を取得する方法を学びたいと思います。オブジェクト番号で項目を探したいのですが、リスト内にある場合はアドレスを返します。私はWPFを使っています。どんな助けもありがとう。ありがとうございました。

+4

あなたは[この](http://stackoverflow.com/a/1175662/647884)チェックし、LINQクエリを使用することができます。 – Bastardo

+0

ObjectNumberが一意の場合は、オブジェクト番号を保持する文字列の型である 'TKey'を使用して、リスト(リストの代わりに)を作成することができます。 – Matthew

+0

私は辞書を使っていましたが、 "製品"が置き換えられたり変更されたりすると、オブジェクト番号を更新できる必要があります。 – JLott

答えて

5

最良の方法は、あなたのクラスでToStringをオーバーライドして、すべてのレコードを結合するためにstring.Joinを使用することです:

var recordsAsString = string.Join(Environment.NewLine, 
      Properties.Select(p => p.ToString())); 
MessagBox.Show(recordsAsString); 

ToStringの実装方法は次のとおりです。

class ObjectProperties 
{ 
    public string ObjectNumber { get; set; } 
    public string ObjectComments { get; set; } 
    public string ObjectAddress { get; set; } 

    public override string ToString() 
    { 
     return "ObjectNumber: " 
       + ObjectNumber 
       + " ObjectComments: " 
       + ObjectComments 
       + " ObjectAddress: " 
       + ObjectAddress; 
    } 
} 

また、リスト内の値を見つけてそれに関連する他の情報を取得する方法についても学びたいと思います。例えば、オブジェクト番号で項目を探したいのですが、リスト内にあればアドレスを返します。

List<T>を検索するにはいくつかの方法がここにありますは2つです:

String numberToFind = "1234"; 
String addressToFind = null; 
// using List<T>.Find method 
ObjectProperties obj = Properties.Find(p => p.ObjectNumber == numberToFind); 
//using Enumerable.FirstOrDefault method (add using System.Linq) 
obj = Properties.FirstOrDefault(p => p.ObjectNumber == numberToFind); 
if (obj != null) 
    addressToFind = obj.ObjectAddress; 
+0

これは完全に働いた!どうもありがとうございます。 – JLott

+0

@JLott:リストを検索する方法を示すために自分の答えを編集しました。 –

+0

驚くべきことに、ほんの数行しか人に教えることができません。あなたの答えを更新していただきありがとうございます、それは非常に有用でした! – JLott

1

リストを取得したら、foreachループを使用してそれをループし、そのように値を出力できます。

linqを使用してリストを照会し、必要な値を返すこともできます。例えば

properties.Where(x=>x.ObjectNumber == 10).FirstOrDefault() 

これはObjectNumberは10

は、あなたがより多くの明確化が必要な場合は私に知らせていた最初のレコードを返します。

2

リストに項目を表示するには、リストを繰り返し処理して情報を取得します。

2

あなたが何をしたいかによって異なります。

あなたはこのコードを使用して、いくつかのデータを見つけるために試してみたい場合:

List<ObjectProperties> Properties = new List<ObjectProperties>(); 
var result = Properties.Where(n => n.ObjectNumber.Equals('yourVariableHere')); 
+0

素晴らしいです。これが私が価値観を探し求めようとしていると思います。これからObjectAddressプロパティだけをどうやって得ることができるか説明してください。ご協力ありがとうございました。 – JLott

+0

ObjectNumberが固有IDであると仮定すると、次のようなことができます。 var objAddress =プロパティ内のpから を選択します。p.ProductName p.ObjectNumber.Equals( 'YourVariable'); –

+0

良いチートシートが必要な場合= http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

2

List<T>クラスを使用すると、リストを照会するために非常に有用な方法の全体の束を使用することを可能にする、IEnumerable<T>を実装しています。

List<T>IEnumerable<T>というMSDNのドキュメントをご覧ください。利用可能な方法を見て、例を見てください。特定の質問がある場合は、SOに戻ってください。

は、ここであなたが一例として尋ね達成することができます方法は次のとおりです。

string address = myList 
       .Where(x=>x.ObjectNumber=="A123") 
       .Select(x=>x.ObjectAddress) 
       .First(); 
関連する問題