更新:2007 年 11 月

错误消息

当从“type name 1”转换为“type name 2”时,用户定义的转换“Conversion method name 1”和“Conversion method name 2”不明确。

有两个转换方法可以使用,编译器无法确定使用哪一个。

可能导致此错误的一种情况如下:

  • 您想从类 A 转换到类 B,其中 A 和 B 不相关。

  • A 从 A0 派生,有一个从 A0 转换到 B 的方法。

  • B 有一个子类 B1,有一个从 A 转换到 B1 的方法。

编译器将认为这两个转换方法是等价的,因为第一个转换方法提供了最好的目标类型,而第二个转换方法提供了最好的源类型。因为编译器无法选择,所以将生成此错误。要解决此问题,请编写一个从 A 转换到 B 的新的显式方法。

另一个导致此错误的情况是有两个从 A 转换到 B 的方法。要修复此错误,请指定显式的强制转换。

示例

下面的示例生成 CS0457。

 复制代码
// CS0457.cs
using System;
public class A { }

public class G0 {  }
public class G1<R> : G0 {  }

public class H0 {
   public static implicit operator G0(H0 h) {
      return new G0();
   }
}
public class H1<R> : H0 {
   public static implicit operator G1<R>(H1<R> h) {
      return new G1<R>();
   }
}

public class Test 
{
   public static void F0(G0 g) {  }
   public static void Main() 
   {
      H1<A> h1a = new H1<A>();
      F0(h1a);   // CS0457
   }
}