在C#方法参数中为uint
参数指定默认值时,如下面的第一个代码块所示,我看到消息“类型为'int'的值不能用作默认参数,因为没有标准转换来键入'uint'“,而在为方法体中的uint变量赋值时,它很好。
代码确实编译;警告是通过Visual Studio 2010中的红色,波浪形下划线提供的。
void GetHistoricData(uint historyLength = 365)
{
uint i = 365; // this is valid
}
使用365U代替365可以很容易地解决这个问题,因此:
void GetHistoricData(uint historyLength = 365U)
{
// method body
}
我发现很难找到一个很好的解释,为什么在其他地方有效的情况下将int
分配给参数uint
是无效的。任何人都可以帮我解决我想找到的'灯泡'时刻吗?
答案 0 :(得分:1)
它为我编译,使用4.0.30319.1和4.0.30319.17379的编译器版本。
如果你使用的是旧版本或不同的编译器(例如Mono),我怀疑它只是一个bug。
编辑:如果编译正常(并且我根本无法从编译器发出警告),那么我怀疑它是一些插件,例如ReSharper。 (不是我在ReSharper中看到它......)
我无法在VS2010中重现这一点。
我建议您执行将代码更新为没有警告的代码,只是为了便于阅读 - 但它仍然是有效的代码而没有更改。< / p>
答案 1 :(得分:1)
考虑到你正在进行强制转换,所以也可能截断该值,我推测,Visual Studio只会警告你可能会发生潜在问题的事实, 邀请让你做出明显的演员表。特别是如果我们谈论默认参数,应该明确指定默认值。相反,如果不是非常明显的演员,总会有一个怀疑的空间,关于演员价值会是什么样的。
答案 2 :(得分:1)
红色下划线通常意味着你无法编译。 VS上的代码分析器有时会出错,产生错误的错误消息和警告,仍然可以编译。重新启动VS usualy摆脱它们。