컴파일러 오류 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
}
}