是什么使得 Min(byte,int) 调用不明确?
我不明白为什么根据编译器,以下内容不明确:
byte x = 200;
int novaCervena = Math.Min(x, 10);
一旦我将 +1 添加到字节,它就不是
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
I do not understand why the following is ambiguous according to compiler:
byte x = 200;
int novaCervena = Math.Min(x, 10);
And once I add +1 to byte it is not
byte x = 200;
int novaCervena = Math.Min(x+1, 10);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当您使用 x+1 时,它绝对不会含糊,因为第一个参数的类型是 int。 (C# 中没有
byte+byte
运算符。)在第一种情况下,您有一个
byte
参数,它可以隐式转换为int
,然后是整数文字参数。参数的类型为int
,但具有隐式常量表达式转换为byte
(请参阅第 6.1.9 节)。因此,虽然Min(byte, byte)
和Min(int, int)
都是适用的重载,但每个重载对于不同的参数都是“首选”(由于可用的转换) ,因此存在歧义。请注意,如果您有一个
int
类型的“正常”表达式(而不是常量表达式),那么歧义就会消失:同样是一个正常的
byte
参数:或者您可以强制任一方式的转换:
It's definitely not ambiguous when you use
x+1
as the type of the first argument is thenint
. (There's nobyte+byte
operator in C#.)In the first case, you have a
byte
argument which can be implicitly converted to anint
, but then an integer literal argument. The argument is of typeint
, but with an implicit constant expression conversion tobyte
(see section 6.1.9). So while bothMin(byte, byte)
andMin(int, int)
are applicable overloads, each is "preferred" for a different parameter (due to the conversions available), hence the ambiguity.Note that if you have a "normal" expression of type
int
(as opposed to a constant expression) the ambiguity goes away:Likewise a normal
byte
argument:Or you can force the conversion either way:
我假设在第一种情况下它无法在
Min(byte,byte)
和Min(int,int)
之间进行选择。对
byte
的操作总是生成int
,因此x+1
是int
并且没有歧义 - 它必须选择Min(int,int)
。I assume in the first case it can't choose between
Min(byte,byte)
andMin(int,int)
.Operations on
byte
always result in anint
, sox+1
isint
and there is no ambiguity - it has to chooseMin(int,int)
.