【发布时间】:2024-01-19 11:04:01
【问题描述】:
假设我有一个方法:
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)) 可以检查接口。
【问题讨论】:
-
你就不能叫它
DuStuff<IMyInterface>吗? -
还有一个想法:我认为如果你在泛型方法中需要
typeof(T),也许你根本不应该使用泛型? -
@MarcinJuraszek 我不同意。有时您可能希望在通用方法中使用
typeof(T)。事实上,我敢打赌,泛型是typeof语句最常见的用法。 -
typeof(T) is IMyInterface始终为假。但我想你的意思是theinstanceOfT is IMyInterface,对吧? -
是的,我想是的,Mikael。谢谢
标签: c# generics interface casting