c# unity 条件に基づいてリストから項目を削除する



removeat(0) c# (6)

public struct stuff
{
    public int ID;
    public int quan;
}

私はID = 1の製品を削除したいと思っています。私は現在これを試しています:

prods.Remove(new stuff{ prodID = 1});

それは動作していません。

ありがとうございます


LINQをお持ちの場合:

var itemtoremove = prods.Where(item => item.ID == 1).First();
prods.Remove(itemtoremove)

あなたLinqを使用することができます。

var prod = from p in prods
           where p.ID != 1
           select p;

prods.Remove(prods.Find(x => x.ID == 1));

prods.Remove(prods.Single(p=>p.ID == 1));

あなたはforeachのコレクションを変更することはできません、Vincentが示唆しているように


linqの使用:

prods.Remove( prods.Single( s => s.ID == 1 ) );

たぶん、 SingleOrDefault()を使用して、要素がまったく存在するかどうかをチェックしたいと思うかもしれません...

編集:
stuffは構造体なので、 SingleOrDefault()はnullを返しません。 しかし、それはデフォルト(stuff)を返します 。これはIDが0になります。 普通の stuff-objectのIDが0でない場合、このIDを問い合わせることができます:

var stuffToRemove = prods.SingleOrDefault( s => s.ID == 1 )
if( stuffToRemove.ID != 0 )
{
    prods.Remove( stuffToRemove );
}

あなたのコレクションタイプがList<stuff>場合、おそらく最良のアプローチは次のとおりです:

prods.RemoveAll(s => s.ID == 1)

これは、リストを1回だけ通過(反復)するので、他の方法よりも効率的でなければなりません。

あなたのタイプが一般的にICollection<T>である場合は、パフォーマンスを気にするならば、短い拡張メソッドを書くのに役立ちます。 もしそうでなければ、おそらくLINQ( Where or Single呼ぶ)を使うことで逃げるでしょう。





.net