我想实现一个泛型类,这将允许安全蒙上了通用的方法,请参见例如:如何在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