更新: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 } } |