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