C#アレイをリストに割り当てるよりエレガントな方法は?
-
27-10-2019 - |
質問
私はこれを持っています:
// 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
部分はそれぞれ投影されています ChangeLogType
に ListItem
, 、 と 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());
所属していません StackOverflow