编译器错误 CS0457
更新: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
}
}