[英]Extension method on generic list
我對C#相當陌生,對於泛型列表和擴展方法有兩個問題。 對不起,如果問題有點愚蠢。
之間有什么區別?
public static IObjectWithTempID FindByTempID
(this ObservableCollection<IObjectWithTempID > list, long tempID)
和
public static IObjectWithTempID FindByTempID< E >
(this ObservableCollection< IObjectWithTempID > list, long tempID)
我已經嘗試閱讀有關該主題的內容,但仍然不了解:$
我遇到了一個奇怪的問題。 當我聲明一個ObservableCollection
,例如這樣
ObservableCollection<TestObjectWithTempID> a =
new ObservableCollection<TestObjectWithTempID>();
可以調用擴展方法
public static long FindByTempID
(this IEnumerable< IObjectWithTempID > list, long tempID){}
在清單上。 令人驚訝的是不可能調用擴展方法
public static long FindByTempID
(this ObservableCollection< IObjectWithTempI D> list, long tempID){}
雖然。 我在這里錯過了什么?
對於2,它必須為:
TheMethod<T>(ObservableCollection<T> list)
where T : ISomeInterface
否則,您可以嘗試將任何 ISomeInterface實例添加到更特定的列表中。
對於第一個問題:
在第二個方法聲明中, FindByTempID<E>
中的FindByTempID<E>
是類型參數 。 換句話說,它是類型的占位符 ,而不是實際類型。 E
可以在方法主體中使用,就像它是實類型一樣。 這類編程的總稱是泛型 。
具有這些擴展方法
public static class Extenders
{
public static void FindByTempID(this ObservableCollection<IObjectWithTempID> e, long tempID)
{
}
public static void FindByTempID2(this IEnumerable<IObjectWithTempID> e, long tempID)
{
}
public static void FindByTempID3(this ObservableCollection<TestObjectWithTempID> e, long tempID)
{
}
public static void FindByTempID4<T>(this ObservableCollection<T> e, long tempID)
{
}
}
然后
var a1 = new ObservableCollection<TestObjectWithTempID>();
var a2 = new ObservableCollection<IObjectWithTempID>();
//a1.FindByTempID(1); /* Is not a collection of interface */
a1.FindByTempID2(1); // IEnumerable<T> is a generic list
a1.FindByTempID3(1); // It is a collection of TestObjectWithTempID
a1.FindByTempID4(1); // Identify the collection as ObservableCollection<TestObjectWithTempID>
a2.FindByTempID(1); // Is a collection of interface
a2.FindByTempID2(1); // IEnumerable<T> is a generic list
//a2.FindByTempID3(1); /* Is not a collection of TestObjectWithTempID */
a2.FindByTempID4(1); // Identify the collection as ObservableCollection<IObjectWithTempID>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.