(補正)後:
class MyObject
{
public int n;
public string t;
}
ロードまで、私の元のリスト:
List<MyObject> allObjects = new List<MyObject>() {
new MyObject() { n = 0, t = "x" },
new MyObject() { n = 1, t = "y" },
new MyObject() { n = 2, t = "x" },
new MyObject() { n = 3, t = "y" },
new MyObject() { n = 4, t = "x" }
};
スプリットアウト使っ種類:
var typeXs = allObjects.FindAll(i => i.t == "x");
var notTypeXs = allObjects.FindAll(i => i.t != "x");
それとも
var typeXs = allObjects.Where(i => i.t == "x").ToList<MyObject>();
var notTypeXs = allObjects.Except(typeXs).ToList<MyObject>();
また
は、他の2つのオプションをアウトパフォームする必要がありますが、理論的にを一度、したがって、唯一の繰り返し処理List.ForEachメソッドを使用することができます。また、LINQライブラリを参照する必要もありません。つまり、.NET 2.0で安全です。
var typeXs = new List<MyObject>();
var notTypeXs = new List<MyObject>();
allObjects.ForEach(i => (i.t == "x" ? typeXs : notTypeXs).Add(i));
2番目の例は、おそらく最高ですが、すべてのオプションを与える良い仕事です。 +1 – BobTheBuilder
私は実際にはそれが2.0の安全であるという事実のために最後の例を実際に好む... – BenAlabaster
それはコレクションを1回だけ繰り返すだけで、他のオプションは両方ともコレクションを2回反復する必要があります少しエレガントに書かれています。 – BenAlabaster