First()
и Last()
являются частью LINQ, поэтому их нет в вашем проекте VS 2005.
Если вы используете List<T>
, это действительно, действительно легко найти первое и последнее значения, предполагая, что список не пуст:
T first = list[0];
T last = list[list.Count-1];
Если вам действительно нужно использовать итераторы, вы можете очень легко реализовать методы LINQ:
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;
}
(Я подозреваю, что реальная реализация Last
проверяет, является ли source
IList<T>
или нет, и возвращает list[list.Count-1]
, если это так, чтобы избежать необходимости перебирать всю коллекцию.)
Как указано в комментариях, это не методы расширения - вы должны написать:
// Assuming the method is in a CollectionHelpers class.
Foo first = CollectionHelpers.First(list);
вместо
Foo first = list.First();
но эффект тот же.