2

リストがあります。LINQの記述方法などを知り、id="CLR"のMyTypesのobjが存在するかどうかを確認したいと思います。

それが存在するかどうかとそのインデックスを知りたいのですが。したがって、存在する場合は、そのインデックスを介してMyTypesの新しいオブジェクトに置き換えることができます。それ以外の場合は追加します。

リスト内のアイテムを反復処理することで実行できることはわかっていますが、LINQステートメントを使用するよりも時間がかかります。間違っている場合は私を訂正してください。

助けを提供できますか。

4

4 に答える 4

10

これには LINQ は必要ありません。便利なList<T>.FindIndex方法があります

List<Foo> foos = ...
int index = foos.FindIndex(foo => foo != null && foo.Id == "CLR");

if(index != -1)
{
     Foo replacement = ...
     foos[index] = replacement;
}
else
{
     Foo toAdd = ...
     foos.Add(toAdd);
}

ところで、ある種のルックアップ テーブルは実際には必要ないのですか? Dictionary<string, Foo>あなたの使用パターンは、リストではなくまたは類似のものを望まないことを示唆しています。

于 2012-05-19T15:13:18.543 に答える
2

ある時点でコレクション全体を反復処理するつもりでない限り、代わりに Dictionary を使用する方が理にかなっています。そうすることで、キーでアイテムを見つけ、キーでアイテムが存在するかどうかを確認し、キーで挿入することができます。それだけでなく、本質的にハッシュテーブルであるため、これらのタイプの操作はディクショナリでより高速です。

于 2012-05-19T15:15:48.380 に答える
0

それは次のようなものかもしれません:

MyType item = MyList.FirstOrDefault(x => x.id == "CLR");

if (item != null)
{
    int index = MyList.IndexOf(item);
    // do something
}
于 2012-05-19T15:13:07.453 に答える
0

あなたが欲しいと思うのは次のようなものです

var obj = myList.FirstOrDefault(x => x.id == "CLR");
if(obj != null)
{
    //do stuff here
}
于 2012-05-19T15:13:25.947 に答える