通用列表上的扩展方法

use*_*240 2 c# extension-methods interface

我对C#很陌生,对通用列表和扩展方法有两个问题.对不起,如果问题有点愚蠢..

有什么区别:

public static IObjectWithTempID FindByTempID
    (this ObservableCollection<IObjectWithTempID > list, long tempID) 
Run Code Online (Sandbox Code Playgroud)

public static IObjectWithTempID FindByTempID< E >
   (this ObservableCollection< IObjectWithTempID > list, long tempID)
Run Code Online (Sandbox Code Playgroud)

我试图阅读这个主题,但仍然不明白:$

我遇到了一个奇怪的问题.当我宣布一个ObservableCollection,比如这个

ObservableCollection<TestObjectWithTempID> a =
    new ObservableCollection<TestObjectWithTempID>();
Run Code Online (Sandbox Code Playgroud)

可以调用扩展方法

public static long FindByTempID
    (this IEnumerable< IObjectWithTempID > list, long tempID){}
Run Code Online (Sandbox Code Playgroud)

在名单上.令人惊讶的是,不可能调用扩展方法

public static long FindByTempID
    (this ObservableCollection< IObjectWithTempI D> list, long tempID){} 
Run Code Online (Sandbox Code Playgroud)

虽然.我错过了什么?

Mar*_*ell 5

对于2,它需要是:

TheMethod<T>(ObservableCollection<T> list)
    where T : ISomeInterface
Run Code Online (Sandbox Code Playgroud)

否则,您可以尝试将任何 ISomeInterface实例添加到更具体的列表中.