为什么在C#方法参数中为uint参数分配整数值是无效的
本文关键字:参数 整数 无效 分配 方法 为什么 uint | 更新日期: 2023-09-27 18:27:48
当为C#方法参数中的uint
参数分配默认值时,如下面的第一个代码块所示,我会收到消息"类型为'int'的值不能用作默认参数,因为没有到类型为'uint'的标准转换",而当为方法体中的uint变量分配int时,这是可以的。
代码确实可以编译;该警告是通过VisualStudio2010中的红色波浪形下划线提供的。
void GetHistoricData(uint historyLength = 365)
{
uint i = 365; // this is valid
}
这可以通过使用365U代替365轻松解决,因此:
void GetHistoricData(uint historyLength = 365U)
{
// method body
}
我发现很难找到一个很好的解释,解释为什么在参数中为uint
分配int
是无效的,而在其他地方这样做是有效的。有人能帮我找到"灯泡"时刻吗?
它为我编译,编译器版本为4.0.30319.1和4.0.30319.17379。
如果你使用的是旧版本或不同的编译器(例如Mono编译器),那么我怀疑这只是一个bug。
编辑:如果它编译得很好(而且我根本不会从编译器那里引发警告),那么我怀疑是某种插件,比如ReSharper。(也不是说我在ReSharper上看到了…)
我无法在VS2010中复制此内容。
我建议将代码更新为没有警告的代码,只是为了可读性,但如果没有更改,它仍然是有效的代码。
红色下划线通常表示无法编译。VS上的代码分析器有时会出错,产生错误消息和警告,这些消息和警告仍在编译中。重新启动VS通常会清除它们。
考虑到您正在进行强制转换,因此也可能截断值,我认为,Visual Studio仅警告可能发生潜在问题,并邀请使强制转换合法。特别是如果我们谈论的是默认参数,那么应该明确指定默认值。相反,在非esplicit强制转换的情况下,对于强制转换值会是什么样子,总是有一个怀疑的空间。