2011-02-07 10 views

答えて

11

ではありません最初の引数の型は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) 
+0

ありがとう、私はそれを得た。ですから、intにキャストする必要があります – lojol

+0

@lojol: 'int'バージョンを使用したい場合は、yesです。 –

+0

私はバイト+バイトを使用できないことを知りませんでした。興味深いことに、ありがとう! – lojol

4

最初のケースでは、Min(byte,byte)Min(int,int)の間で選択することはできません。 intで常にbyte結果に

オペレーション、そうx+1intで、何の曖昧さがありません - それはMin(int,int)を選択する必要があります。

関連する問題