我想實現一個泛型類,這將允許安全蒙上了通用的方法,請參見例如:如何在C#中使用泛型進行安全的投射?
public class Foo<T> : IEnumerable<T>
{
...
public IEnumerable<R> SafeCast<R>()
where T : R
{
return this.Select(item => (R)item);
}
}
然而,編譯器告訴我,Foo<T>.SafeCast<R>() does not define parameter 'T'
。我明白這個消息,我不能在方法中指定T
的約束,因爲它沒有在方法中定義。但是我怎樣才能指定一個逆向約束?
如果T不是從R派生的,你會期望什麼行爲? – Jake 2010-03-30 22:01:32
@Jake:這裏的意圖是,如果沒有選擇R使得T可轉換爲R,那麼程序將無法編譯。例如,您可能有Foo f並且說f.SafeCast