如何转换为未知类型,需要转换为GenericType,但T未知

时间:2013-10-04 19:11:39

标签: c# reflection interface casting

我需要从一个我不知道类型的对象中调用DeepClone()方法。

object x = GetObject();
var x2 = x as IDeepCloneable< ?????? >;//What can I do here???
var clone = x2.DeepClone();

public interface IDeepCloneable<T>
{
    T DeepClone();
}

我尝试创建一个新的“基础”接口,并将“:IDeepCloneable”添加到泛型类中。

public interface IDeepCloneable
{
   object DeepClone();
}

但在这种情况下,我需要从T DeepClone()更改派生接口的方法;到新T DeepClone();.结果,所有已经实现了IDeepCloneable&lt; T&GT;不会编译..

2 个答案:

答案 0 :(得分:4)

你想要一个协变界面:

public interface IDeepCloneable<out T>
{
    T DeepClone();
}

然后您可以转为IDeepCloneable<object>

答案 1 :(得分:2)

在C#4.0中,dynamic关键字允许您通过暂停类型检查直到运行时来解决此问题:

dynamic x = GetObject();
var clone = x.DeepClone();

只要在DeepClone()

上有方法x,就可以正常工作