C# 将扩展方法推广到任何类型
我试图将我的“Last”扩展方法推广到任何数据类型的列表:C# 将扩展方法推广到任何类型,c#,C#,我试图将我的“Last”扩展方法推广到任何数据类型的列表: public static CartesianPoint Last(this List<CartesianPoint> MyList) { return MyList.ElementAt(MyList.Count - 1); } publicstaticcartesianpointlast(此列表为MyList) { 返回MyList.ElementAt(MyList.Count-1); } “CartesOnP
public static CartesianPoint Last(this List<CartesianPoint> MyList)
{
return MyList.ElementAt(MyList.Count - 1);
}
publicstaticcartesianpointlast(此列表为MyList)
{
返回MyList.ElementAt(MyList.Count-1);
}
“CartesOnPoint”是一个自定义结构。我希望这个函数能够处理任何数据类型的列表。这可能吗?使用“对象”是唯一的方法吗?Last已经是受支持的Linq扩展。您可以将它与任何IEnumerable一起使用。Last是受支持的Linq表达式,但如果您确实想编写泛型扩展方法,则需要使用以下语法:将泛型
放在方法声明上,而不是类上
public static T Last<T>(this List<T> MyList)
{
return MyList[MyList.Count - 1];
}
public static T Last(此列表为MyList)
{
返回MyList[MyList.Count-1];
}
如果这是一个更一般的问题,而不是关于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));
public static TResult示例(此IEnumerable items,Func gimmetValue)
{
var firstItem=items.First();
返回GimmetValue(第一项);
}
var items=new[]{new{Value1=1,Value2=“Abc”};
int value1=items.Sample(i=>i.value1);
stringvalue2=items.Sample(i=>i.value2.Substring(2,1));
+1但是您应该提供一个快速的代码示例,因为OP显然不熟悉这个主题。感谢您理解我试图解决一个更一般的问题。