我相信这个问题以前已经有人回答过了,但我找不到任何信息。希望一些IT技术专家能够帮忙。
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
}
- 参数类型'Orangutan'不能分配给参数类型'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);