我需要从我不知道类型的对象中调用方法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 的类都不会编译。

最佳答案

您需要一个协变接口:

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


然后,您可以强制转换为IDeepCloneable<object>

关于c# - 如何强制转换为未知类型,需要强制转换为GenericType,但T未知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19189008/

10-14 07:58