🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Compiler Error CS0034 运算符“operator”对于“type1”和“type2”类型的操作数具有二义性 运算符用在了两个对象上,并且编译器找到多个转换。因为转换必须是唯一的,因此必须进行一次强制转换,或者使其中一个转换成为显式转换。有关更多信息,请参见[转换运算符(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/09479473.aspx)。 下面的示例生成 CS0034: ``` // CS0034.cs public class A { // allows for the conversion of A object to int public static implicit operator int (A s) { return 0; } public static implicit operator string (A i) { return null; } } public class B { public static implicit operator int (B s) // one way to resolve this CS0034 is to make one conversion explicit // public static explicit operator int (B s) { return 0; } public static implicit operator string (B i) { return null; } public static implicit operator B (string i) { return null; } public static implicit operator B (int i) { return null; } } public class C { public static void Main () { A a = new A(); B b = new B(); b = b + a; // CS0034 // another way to resolve this CS0034 is to make a cast // b = b + (int)a; } } ``` 在 C# 1.1 中,一个编译器 Bug 使其能够定义一个类,在其中实现针对 **int** 和 **bool** 的用户定义的隐式转换,并对该类型的对象使用按位 **AND** 运算符 (**&**)。在 C# 2.0 中,已修复此 Bug 以使编译器符合 C# 规范,因此以下代码现在将导致错误 CS0034: ``` namespace CS0034 { class TestClass2 { public void Test() { TestClass o1 = new TestClass(); TestClass o2 = new TestClass(); TestClass o3 = o1 & o2; //CS0034 } } class TestClass { public static implicit operator int(TestClass o) { return 1; } public static implicit operator TestClass(int v) { return new TestClass(); } public static implicit operator bool(TestClass o) { return true; } } } ```