1

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

// 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の配列を返す関数を呼び出し、それぞれをリストコントロールに追加します。これを行うためのよりエレガントな方法はありますか?これや似たようなことをするたびにコードを繰り返しているような気がします。

4

5 に答える 5

5

うん、LINQtoObjectsはあなたの友達です:

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

パーツはそれぞれをにSelect投影し、結果のシーケンスをに変換します。ChangeLogTypeListItemToList()List<ListItem>

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

LINQ全般、特にLINQ to Objectsについてさらに学ぶ価値は十分にあります。これにより、このようなあらゆる種類の作業がはるかに簡単になります。

于 2011-06-13T19:16:56.727 に答える
2
using System.Linq;

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

LstChangeLogType.Items.AddRange(items);
于 2011-06-13T19:16:09.110 に答える
2
var range = Types.Select(rec => 
       new ListItem { Text = rec.Type, Value = rec.ID.ToString() });

LstChangeLogType.AddRange(range);
于 2011-06-13T19:16:33.187 に答える
2

Linq?

LstChangeLogType.Items = Types.Select(x => new ListItem() 
                     { Text = x.Type, Value = x.ID.ToString() }).ToList();
于 2011-06-13T19:17:41.417 に答える
2

いくつかのLINQ拡張メソッドの使用:

LstChangeLogType.AddItems.AddRange(
    Types.Select(t => 
        new ListItem() { Text = t.Type, Value = t.ID.ToString() }).ToArray());
于 2011-06-13T19:18:22.750 に答える