First()
とLast()
は、彼らがあなたのVS 2005のプロジェクトで発見されていない理由であるLINQの一部である。
あなたがしている場合それは本当にだList<T>
を、使用して本当に、リストをと仮定すると非空で最初と最後の値を見つけるのは簡単:
を:あなたは本当にあなたが本当に簡単にLINQのメソッドを実装することができますイテレータを使用する必要がある場合
T first = list[0];
T last = list[list.Count-1];
public static T First<T>(IEnumerable<T> source)
{
foreach (T element in source)
{
return element;
}
throw new InvalidOperationException("Empty list");
}
public static T Last<T>(IEnumerable<T> source)
{
T last = default(T);
bool gotAny = false;
foreach (T element in source)
{
last = element;
gotAny = true;
}
if (!gotAny)
{
throw new InvalidOperationException("Empty list");
}
return last;
}
(私はsource
がIList<T>
かではなく、そうならば、コレクション全体を反復処理することを避けるために、list[list.Count-1]
を返すかどうかLast
チェックの実際の実装を疑う。)
コメントで指摘したように、これらの拡張メソッドではありません - 次のように記述します。
// Assuming the method is in a CollectionHelpers class.
Foo first = CollectionHelpers.First(list);
代わりの
Foo first = list.First();
を
でも効果は同じです。
LINQのFirst()とLast()は、リストの最初または最後の項目を取得するより複雑です。関数を満たす最初または最後の項目を検索するために使用される述語を受け入れます。つまり、ラムダ関数に渡して最初の一意の項目を見つけることができます。 –
述部を受け入れるオーバーロードは、はいです。しかし、OPがFindとFindLast(これらのオーバーロードと同等です)を認識しているので、彼は実際にはパラメータのないものに興味があると思います。 –
拡張メソッドではありません.net 3.0の一部、つまりVS2005(.net 2.0)にはありません – FryGuy