다음을 통해 공유


컴파일러 오류 CS0457

업데이트: 2007년 11월

오류 메시지

'type name 1'에서 'type name 2'(으)로 변환하는 동안 모호한 사용자 정의 변환 'Conversion method name 1' 및 'Conversion method name 2'이(가) 발생했습니다.
Ambiguous user defined conversions 'Conversion method name 1' and 'Conversion method name 2' when converting from 'type name 1' to 'type 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
   }
}