2010-11-24 47 views
2

我想概括我的「最後一次」的擴展方法的工作與任何數據類型的列表中使用:歸納的擴展方法與任何類型的

public static CartesianPoint Last(this List<CartesianPoint> MyList) 
{ 
    return MyList.ElementAt(MyList.Count - 1); 
} 

「CartesionPoint」是一個自定義的結構。我希望這個函數能夠處理任何數據類型的列表。這可能嗎?唯一的方法是使用「對象」嗎?

回答

3

最後是受支持的Linq表達式,但如果您確實想要編寫通用擴展方法,則這是您要查找的語法:將通用<T>放在方法聲明上,而不放在類上。

public static T Last<T>(this List<T> MyList) 
    { 
     return MyList[MyList.Count - 1]; 
    } 
7

最後一項已經是受支持的Linq擴展。您可以將其與任何IEnumerable一起使用。

+0

+1參見:http://msdn.microsoft.com/en-us /library/bb358775.aspx – 2010-11-24 07:37:45

+0

+1,但您應該提供一個快速代碼示例,因爲OP顯然不熟悉該主題。 – 2010-11-24 08:32:58

0

萬一這更是一個普遍的問題,不是特別約最後():

只要編譯器能夠找出使用哪種類型,你可以有泛型類型參數上你方法。 當它無法推斷它們時,你必須自己指定它們。 (見方法Enumerable.OfType或演員的詳細信息)

下面是一個抽象的例子試圖說明什麼是可能的:

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));