【发布时间】:2009-11-24 18:48:13
【问题描述】:
所以,我确信以前在某个地方已经回答了这个问题,但我在任何地方都找不到。希望一些泛型专家可以提供帮助。
public interface IAnimal{}
public class Orangutan:IAnimal{}
public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
Orangutan orangutan = new Orangutan();
action(orangutan); //Compile error 1
//This doesn't work either:
IAnimal animal = new Orangutan();
action(animal); //Compile error 2
}
- 参数类型“猩猩”不能分配给参数类型“T”
- 参数类型“IAnimal”不可分配给参数类型“T”
编辑:根据 Yuriy 和其他人的建议,我可以进行一些选角,例如:
public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
Orangutan orangutan = new Orangutan();
action((T)(IAnimal)orangutan);
//This doesn't work either:
IAnimal animal = new Orangutan();
action((T)animal);
}
我想做的是像这样调用 ValidateUsing 方法:
ValidateUsing(Foo);
不幸的是,如果 foo 看起来像这样:
private void Foo(Orangutan obj)
{
//Do something
}
我必须在调用 ValidateUsing 时明确指定类型
ValidateUsing<Orangutan>(Foo);
【问题讨论】: