为什么在C#方法参数中为uint参数赋值整数值无效?

时间:2012-03-15 10:52:56

标签: c# visual-studio-2010

在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是无效的。任何人都可以帮我解决我想找到的'灯泡'时刻吗?

3 个答案:

答案 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摆脱它们。