4

コンパイラによると、なぜ以下が曖昧なのかわかりません。

byte x = 200; 
int novaCervena = Math.Min(x, 10);

そして、バイトに+1を追加すると、そうではありません

byte x = 200; 
int novaCervena = Math.Min(x+1, 10);
4

2 に答える 2

11

x+1最初の引数の型は。であるため、使用する場合は間違いなくあいまいではありませんint。(byte+byteC#には演算子はありません。)

最初のケースでは、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)
于 2011-02-07T07:23:25.917 に答える
4

最初のケースでは、との間Min(byte,byte)で選択できないと思いますMin(int,int)

の操作はbyte 常に結果になります。intそのため、あいまいさはありません。を選択する必要がありx+1ます。intMin(int,int)

于 2011-02-07T07:23:35.590 に答える