List <T>要素に特定のプロパティ値を持つアイテムが含まれているかどうかを確認する方法


113
public class PricePublicModel
{
    public PricePublicModel() { }

    public int PriceGroupID { get; set; }
    public double Size { get; set; }
    public double Size2 { get; set; }
    public int[] PrintType { get; set; }
    public double[] Price { get; set; }
}

List<PricePublicModel> pricePublicList = new List<PricePublicModel>();

の要素を確認する方法 pricePublicList特定の値含まれている。具体的には、存在するpricePublicModel.Size == 200か確認したいのですが?また、この要素が存在する場合、どの要素であるかをどのようにして知ることができますか?

編集辞書がこれに適している場合は、辞書を使用できますが、方法を知る必要があります:)

回答:


186

リストがあり、リスト内の特定の基準に一致する要素が存在する場所を知りたい場合は、FindIndexインスタンスメソッドを使用できます。といった

int index = list.FindIndex(f => f.Bar == 17);

どこf => f.Bar == 17照合基準と述語があります。

あなたの場合、あなたは書くかもしれません

int index = pricePublicList.FindIndex(item => item.Size == 200);
if (index >= 0) 
{
    // element exists, do what you need
}

1
その値の属性がわからない場合はどうなりますか?たとえば、「18.00」と表示されているリストアイテムがあるのですが、それがどこから来ているのかわからないので、属性にこの値があるかどうかを確認しますか?基本的に、そしてこの例と同様に、私はそれを理解したい.sizeや.barを持っていません
Haithem KAROUI '17

アイテムが存在しない場合はどうなりますか?インデックス値はどうなりますか?
BKSpurgeon 2017

8
注:要素が存在しない場合は、findIndexが返され–1ます。ドキュメント:msdn.microsoft.com/es-es/library/x1xzf2ca
v

1
@tomloprodがゼロ以上のインデックスをチェックする理由です。if(インデックス> = 0)。あたかもそれを書いたかもしれません(index> -1)。
DannyC 2018年

127
bool contains = pricePublicList.Any(p => p.Size == 200);

6
これは厳密に存在するかどうかを確認するためのものです。
ダニエルA.ホワイト

3
これは実際には質問の答えにはなりません。彼は言ったhow to know which one is it
ジョージジョンストン

15
彼の質問には答えられないかもしれませんが、ある名前のオブジェクトが私のコレクションに既に存在するかどうかを確認する必要があったため、確かに私には役立ちました。私は改善された.Contains-methodを期待しました-これはまさにこのLINQ式が行うことです。ありがとうございました。
イゴール

3
タイトルの質問に答えます。OPは彼の説明の中で、彼が望んでいることを正確には望んでいないと説明しています。それでも、彼の1人がいて、何十人もの私たちがgoogleを介してこの質問を見つけています。私は彼のタイトルの質問に対する本当の答えを見つけることができることがより重要だと思います。
MGOwen

5
誰かがこれを試しても.Any()が認識されない場合は、System.Linq使用して追加する必要があります。ファイルの上部。
MGOwen

32

あなたは存在を使用することができます

if (pricePublicList.Exists(x => x.Size == 200))
{
   //code
}

13

これは、LINQを使用して簡単に実行できます。

var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
    // Element doesn't exist
}

この条件に一致する要素を直接編集することはできますか?それを取得して新しいオブジェクトに保存するのではなく、直接変更しますか?
ilija veselica

match返される値は、(それが修飾することができるPricePublicModelリストにあったオブジェクト)。
ジェイコブ

nullになる可能性のあるオブジェクトを直接変更しないでください。あなたはいつでもできます:match.Size = 300;またはforeach(var item in pricePublicList.Where(p => p.Size == 200)) item.Size = 300;。私自身はそれをワンライナーとしては使用しないでしょう。
エイミーウェスト

11

これには実際にLINQは必要ありません。必要な処理をList<T>正確に実行するメソッドが提供されるためですFind

指定された述語で定義された条件に一致する要素を検索し、全体で最初に出現したものを返しますList<T>

コード例:

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);

4
var item = pricePublicList.FirstOrDefault(x => x.Size == 200);
if (item != null) {
   // There exists one with size 200 and is stored in item now
}
else {
  // There is no PricePublicModel with size 200
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.