C# 将扩展方法推广到任何类型

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

我试图将我的“Last”扩展方法推广到任何数据类型的列表:

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显然不熟悉这个主题。感谢您理解我试图解决一个更一般的问题。