コンパイラによると、なぜ以下が曖昧なのかわかりません。
byte x = 200;
int novaCervena = Math.Min(x, 10);
そして、バイトに+1を追加すると、そうではありません
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
コンパイラによると、なぜ以下が曖昧なのかわかりません。
byte x = 200;
int novaCervena = Math.Min(x, 10);
そして、バイトに+1を追加すると、そうではありません
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
x+1
最初の引数の型は。であるため、使用する場合は間違いなくあいまいではありませんint
。(byte+byte
C#には演算子はありません。)
最初のケースでは、byte
暗黙的にに変換できる引数がありますがint
、整数リテラル引数になります。引数は型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)
。
の操作はbyte
常に結果になります。int
そのため、あいまいさはありません。を選択する必要がありx+1
ます。int
Min(int,int)