我有2个实现相同接口的类。但是以某种方式,我无法将它们从一个投射到另一个。
这是一个例子:
public interface IObject {
// ...
}
public class FooObject : IObject {
// ...
}
public class BarObject : IObject {
// ...
}
-
如果我这样做,VS会将其标记为Cannot convert type 'FooObject' to 'BarObject'
var foo = new FooObject();
var bar = (BarObject)foo; // Build error
-
如果我这样做,就不会产生构建错误,但是在调用时,它会抛出System.InvalidCastException: Unable to cast object of type 'FooObject' to 'BarObject'.
var foo = new FooObject();
var bar = (BarObject)(IObject)foo; // No build error, but InvalidCastException gets thrown
-
那么,如何将接口(FooObject
)的实现(IObject
)转换/解析/转换为同一接口的另一个实现(BarObject
)?
我通过创建一个显式转换运算符来解决此问题:
public class FooObject {
// ...
public static explicit operator BarObject(FooObject fooObject)
{
// ...
}
}
感谢CodeCaster。