Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将类FooObject转换为类BarObject,这两个类都实现了接口IOObject?_C#_Interface_Casting_Implementation - Fatal编程技术网

C# 如何将类FooObject转换为类BarObject,这两个类都实现了接口IOObject?

C# 如何将类FooObject转换为类BarObject,这两个类都实现了接口IOObject?,c#,interface,casting,implementation,C#,Interface,Casting,Implementation,我有两个实现相同接口的类。但不知怎的,我不能把它们从一个扔到另一个 下面是一个例子: public interface IObject { // ... } public class FooObject : IObject { // ... } public class BarObject : IObject { // ... } - 如果我这样做,VS会将其标记为无法将类型“FooObject”转换为“BarObject” var foo = new FooObj

我有两个实现相同接口的类。但不知怎的,我不能把它们从一个扔到另一个

下面是一个例子:

public interface IObject {
    // ...
}

public class FooObject : IObject {
    // ...
}

public class BarObject : IObject {
    // ...
}
-

如果我这样做,VS会将其标记为
无法将类型“FooObject”转换为“BarObject”

var foo = new FooObject();
var bar = (BarObject)foo; // Build error
-

如果我这样做,则没有生成错误,但调用时,它会抛出
System.InvalidCastException:无法将类型为“foooobject”的对象强制转换为“BarObject”。

var foo = new FooObject();
var bar = (BarObject)(IObject)foo; // No build error, but InvalidCastException gets thrown
-

那么,如何将接口(
ioobject
)的一个实现(
FooObject
)强制转换/解析/转换为同一接口的另一个实现(
BarObject

解决方案: 我通过创建显式转换运算符修复了此问题:

public class FooObject {
    // ...
    public static explicit operator BarObject(FooObject fooObject)
    {
        // ...
    }
}

多亏了。

你不能。
Cat
Dog
都可以实现
IAnimal
,但不能将一个转换为另一个-至少在不编写隐式或显式转换运算符的情况下不能。你到底想解决什么问题?@CodeCaster,我创建了一个
公共静态显式操作符BarObject(foooobject foooobject)
,成功了。谢谢我只是在这里提出了一个类似的建议:。如果你使用这个扩展方法,你可能是对的:@Olivier nice,这就是那个复制品丢失的地方。