質問

私はこれを持っています:

// Load changelog types
ChangeLogType[] Types = ChangeLogFunctions.GetAllChangelogTypes();
foreach(ChangeLogType Rec in Types){
    ListItem N = new ListItem();
    N.Text = Rec.Type;
    N.Value = Rec.ID.ToString();
    LstChangeLogType.Items.Add(N);
}

Changelogtypesの配列を返す関数を呼び出し、それぞれをリストコントロールに追加します。これを行うためのよりエレガントな方法はありますか?これや似たようなことをするたびにコードを繰り返していると感じています。

役に立ちましたか?

解決

うん、オブジェクトへのlinqはあなたの友達です:

var changeLogTypes = ChangeLogFunctions.GetAllChangelogTypes()
                                       .Select(x => new ListItem { 
                                                      Text = x.Type,
                                                      Value = x.ID.ToString() })
                                       .ToList();

Select 部分はそれぞれ投影されています ChangeLogTypeListItem, 、 と ToList() 結果のシーケンスをaに変換します List<ListItem>.

これはあなたが本当に欲しいと仮定しています 新着 これらすべてのエントリを含むリスト。結果をanに追加する必要がある場合 既存 リスト、あなたはそれなしでそれをします ToList 電話しますが、呼び出します AddRange の結果の既存のリストで Select 電話。

LINQ全般について、特にオブジェクトに対してLINQについてもっと学ぶ価値があります。これは、このようなあらゆる種類のものをはるかに簡単にすることができます。

他のヒント

var range = Types.Select(rec => 
       new ListItem { Text = rec.Type, Value = rec.ID.ToString() });

LstChangeLogType.AddRange(range);

linq?

LstChangeLogType.Items = Types.Select(x => new ListItem() 
                     { Text = x.Type, Value = x.ID.ToString() }).ToList();
using System.Linq;

var items = Types
  .Select (rec => ListItem
    {
      Text = Rec.Type;
      Value = Rec.ID.ToString();
    }

LstChangeLogType.Items.AddRange(items);

いくつかのLINQ拡張法の使用:

LstChangeLogType.AddItems.AddRange(
    Types.Select(t => 
        new ListItem() { Text = t.Type, Value = t.ID.ToString() }).ToArray());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top