我有以下课程
public interface InterfaceBase
{
}
public class ImplementA:InterfaceBase
{
}
public class ImplementB:InterfaceBase
{
}
public void TestImplementType<T>(T obj) where T: InterfaceBase
{
}
Run Code Online (Sandbox Code Playgroud)
如何推断T是SolidA还是ImplementB?我试着用
typeof(T) is ImplementA
Run Code Online (Sandbox Code Playgroud)
但是这个表达式总是被评估为false.
编辑:我如何将obj转换为ImplementA或ImplementB?
严格来说,你应该避免在泛型中过多的专业化.将任何专用逻辑放在接口上的成员中会更加清晰,因此任何实现都可以采用不同的方式.但是,有很多方法:
你可以测试"obj"(假设它是非null)
bool testObj = obj is ImplementA;
Run Code Online (Sandbox Code Playgroud)
你可以测试T是typeof(ImplementA):
bool testEq = typeof(T) == typeof(ImplementA);
Run Code Online (Sandbox Code Playgroud)
同样,您可以将其作为ImplementA或子类进行测试:
bool testAssign = typeof(ImplementA).IsAssignableFrom(typeof(T));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5686 次 |
| 最近记录: |