共用方式為


編譯器錯誤 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
   }
}