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

Jas*_*son 8 c# visual-studio-2010

uint在为C#方法参数中的参数分配默认值时,如下面第一个代码块所示,我看到消息"类型为'int'的值不能用作默认参数,因为没有标准转换键入'uint'",而在为方法体中的uint变量赋值时,它很好.

代码编译; 警告是通过Visual Studio 2010中的红色,波浪形下划线提供的.

void GetHistoricData(uint historyLength = 365) 
{
    uint i = 365; // this is valid
}
Run Code Online (Sandbox Code Playgroud)

通过使用365U代替365可以轻松解决这个问题,因此:

void GetHistoricData(uint historyLength = 365U) 
{
    // method body
}
Run Code Online (Sandbox Code Playgroud)

我发现这真的是难以发现的,为什么它是无效的一种分配好解释intuint的参数时,它是有效的这样做的其他地方.任何人都可以帮我解决我想找到的'灯泡'时刻吗?

Jon*_*eet 1

它为我编译,编译器版本为 4.0.30319.1 和 4.0.30319.17379。

如果您使用的是旧版本或不同的编译器(例如 Mono 编译器),那么我怀疑这只是一个错误。

编辑:如果编译正常(并且我根本无法从编译器中引发警告),那么我怀疑它是某个插件,例如 ReSharper。(我也没有在 ReSharper 中看到它......)

我无法在 VS2010 中重现这一点。

我建议您代码更新为没有警告的代码,只是为了可读性 - 但如果没有更改,它仍然是有效的代码。