假设我有一个方法:

public void DoStuff<T>() where T : IMyInterface {
 ...
}


在其他地方,我想用其他方法调用

public void OtherMethod<T>() where T : class {
...
if (typeof(T) is IMyInterface) // have ascertained that T is IMyInterface
   DoStuff<T>();
}


有什么方法可以将T转换为具有我的界面吗?

DoStuff<(IMyInterface)T>和其他类似变体对我不起作用。

编辑:感谢您指出typeof(T) is IMyInterface是检查接口的错误方法,而应在T的实际实例上调用。

Edit2:我发现(IMyInterface).IsAssignableFrom(typeof(T))在检查界面时起作用。

最佳答案

我认为最简单的方法就是反思。例如。

public void OtherMethod<T>() where T : class {
    if (typeof(IMyInterface).IsAssignableFrom(typeof(T))) {
        MethodInfo method = this.GetType().GetMethod("DoStuff");
        MethodInfo generic = method.MakeGenericMethod(typeof(T));
        generic.Invoke(this, null);
    }
}

关于c# - 将T转换为具有接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18382074/

10-10 03:06