考虑以下代码:

class MyClass
{
}

class MyClass2 : MyClass
{
}

private void Foo(MyClass cl)
{
    //cl is actually MyClass2 instance
    TestGeneric(cl);
}

private void TestGeneric<T>(T val)
{
     //do smth
}

调用 Foo()之后,TestGeneric中的T是 MyClass ,而不是 MyClass2
如何实现将val视为 MyClass2 实例?
提前致谢。

更新:
我实际上不知道该对象是使用 MyClass2 ctor创建的,而是可以通过调用val.GetType()来推断出这一点,所以像 MyClass2 这样的简单对象将无法正常工作

最佳答案

假设您可以更改Foo,但不能更改其签名,则可以执行以下操作:

private void Foo(MyClass cl)
{
    TestGeneric((dynamic)cl);
}

这将解决在运行时而不是在编译时调用的TestGeneric的版本,当TestGeneric<MyClass2>是该类型时调用cl

09-17 17:25