:Min(byte、int)呼び出しが曖昧になるのはなぜですか?以下は、コンパイラによる曖昧である理由を私は理解していない
byte x = 200;
int novaCervena = Math.Min(x, 10);
そして、私はそれをバイトを+1を追加したら、あなたはとしてx+1
を使用するとき、それは間違いなくあいまいではありません
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
:Min(byte、int)呼び出しが曖昧になるのはなぜですか?以下は、コンパイラによる曖昧である理由を私は理解していない
byte x = 200;
int novaCervena = Math.Min(x, 10);
そして、私はそれをバイトを+1を追加したら、あなたはとしてx+1
を使用するとき、それは間違いなくあいまいではありません
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
ではありません最初の引数の型はint
です。 (C#で何byte+byte
オペレータはありません。)
が最初のケースでは、あなたは、暗黙的にint
に変換することができ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