我试图概括我的“Last”扩展方法,以便与任何数据类型的列表一起使用:
public static CartesianPoint Last(this List<CartesianPoint> MyList)
{
return MyList.ElementAt(MyList.Count - 1);
}
“CartesionPoint”是一个自定义结构。我希望此函数可以处理任何数据类型的列表。这可能吗?使用'对象'是唯一的方法吗?
答案 0 :(得分:7)
Last已经是受支持的Linq扩展。您可以将它与任何IEnumerable一起使用。
答案 1 :(得分:3)
Last是受支持的Linq表达式,但如果您确实想编写泛型扩展方法,那么这就是您要查找的语法:将泛型<T>
放在方法声明上,而不是放在类上。
public static T Last<T>(this List<T> MyList)
{
return MyList[MyList.Count - 1];
}
答案 2 :(得分:0)
如果这是一个更普遍的问题,不是特别关于Last():
只要编译器能够确定使用哪种类型,您就可以在方法上使用泛型类型参数。 当它无法推断它们时,你必须自己指定它们。 (有关详细信息,请参阅Enumerable.OfType或Cast方法)
这是一个试图展示可能性的抽象示例:
public static TResult Sample<TItem, TResult>(this IEnumerable<TItem> items, Func<TItem, TResult> gimmeThatValue)
{
var firstItem = items.First();
return gimmeThatValue(firstItem);
}
var items = new []{new{Value1 = 1, Value2 = "Abc"}};
int value1 = items.Sample(i => i.Value1);
String value2 = items.Sample(i => i.Value2.Substring(2, 1));