나는 왜 다음을 이해하지 못한다는 컴파일러에 따라 모호 :Min (byte, int) 호출을 모호하게 만드는 이유는 무엇입니까?
byte x = 200;
int novaCervena = Math.Min(x, 10);
을 그리고 내가 바이트에 +1을 추가하면
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
나는 왜 다음을 이해하지 못한다는 컴파일러에 따라 모호 :Min (byte, int) 호출을 모호하게 만드는 이유는 무엇입니까?
byte x = 200;
int novaCervena = Math.Min(x, 10);
을 그리고 내가 바이트에 +1을 추가하면
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
당신이로 x+1
를 사용할 때 그것은 확실히 모호한 아니다 아니다 첫 번째 인수의 형식은 int
입니다. 첫 번째 경우, 당신은 암시 적으로 int
로 변환 할 수있는 byte
인수가
(가. C#에서 더 byte+byte
연산자 없다),하지만 정수 리터럴 인수입니다. 인수는 int
유형이지만 암시 적 상수 표현식은 byte
으로 변환됩니다 (6.1.9 절 참조). 따라서 Min(byte, byte)
과 Min(int, int)
이 모두 적용 가능한 오버로드이지만 각 매개 변수에 대해 (사용 가능한 변환으로 인해) 각각 "선호"되므로 모호합니다. 당신이 유형 int
의 "정상적인"표현이있는 경우 (상수 표현식 반대)
참고 모호성이 사라지고 : 마찬가지로
byte x = 200;
int y = 10;
int z = Math.Min(x, y); // Uses Math.Min(int, int)
정상 byte
인수 :
byte x = 200;
byte y = 10;
byte z = Math.Min(x, y); // Uses Math.Min(byte, byte)
또는 전환을 강제로 수행 할 수 있습니다.
byte x = 200;
byte z = Math.Min(x, (byte)10); // Uses Math.Min(byte, byte)
byte a = 200;
int b = Math.Min((int) a, 10); // Uses Math.Min(int, int)
첫 번째 경우 Min(byte,byte)
과 Min(int,int)
중에서 선택할 수 없다고 가정합니다. int
에서 byte
항상 결과에
운영, 그래서 x+1
는 int
과 모호함이 없다 - 그것은 Min(int,int)
를 선택할 수 있습니다.
감사합니다. 따라서 int로 캐스트해야합니다 – lojol
@lojol : 'int' 버전을 사용하려면 yes를 사용하십시오. –
나는 바이트 + 바이트를 사용할 수 없다는 것을 몰랐다. 흥미 롭다, 고마워! – lojol