loj*_*jol 4 c# byte ambiguous-call
I do not understand why the following is ambiguous according to compiler:
byte x = 200;
int novaCervena = Math.Min(x, 10);
Run Code Online (Sandbox Code Playgroud)
And once I add +1 to byte it is not
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
当你使用x+1第一个参数的类型时,它绝对不是模棱两可的int.(byte+byteC#中没有运算符.)
在第一种情况下,您有一个byte参数可以隐式转换为a 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)
Run Code Online (Sandbox Code Playgroud)
同样是正常的byte论点:
byte x = 200;
byte y = 10;
byte z = Math.Min(x, y); // Uses Math.Min(byte, byte)
Run Code Online (Sandbox Code Playgroud)
或者你可以强制转换:
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)
Run Code Online (Sandbox Code Playgroud)