Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在C#方法参数中为uint参数赋值是无效的?_C#_Visual Studio 2010 - Fatal编程技术网

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

为什么在C#方法参数中为uint参数赋值是无效的?,c#,visual-studio-2010,C#,Visual Studio 2010,当为C方法参数中的uint参数指定默认值时,如下面的第一个代码块所示,我收到一条消息“类型为'int'的值不能用作默认参数,因为没有到类型'uint'的标准转换”,然而,当在方法体中将int赋值给uint变量时,就可以了 代码不编译;在VisualStudio2010中,警告是通过红色、扭曲的下划线提供的 void GetHistoricData(uint historyLength = 365) { uint i = 365; // this is valid } 使用365U代替

当为C方法参数中的
uint
参数指定默认值时,如下面的第一个代码块所示,我收到一条消息“类型为'int'的值不能用作默认参数,因为没有到类型'uint'的标准转换”,然而,当在方法体中将int赋值给uint变量时,就可以了

代码不编译;在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中复制这个


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

考虑到您正在进行强制转换,因此可能还会截断值,我猜,VisualStudio只会警告您可能发生的潜在问题,并邀请您使用esplicit。特别是当我们谈论默认参数时,应该明确指定默认值。相反,在非esplicit cast的情况下,始终有一个怀疑的空间,关于cast值是什么样子的。

红色下划线通常意味着无法编译。VS上的代码分析器有时会出错,产生错误的错误消息和警告,但仍然可以编译。重新启动VS通常可以摆脱它们。

这也符合我的要求。我应该提到这一点,所以我会更新这个问题。警告是VS2010中的红色曲线消息,而不是生成错误。这可能是因为可选参数的工作方式,这里实际发生的是将值get注入调用方法,显然,编译器认为在不发出警告的情况下这样做不是一个好主意,毕竟它看起来是一个重新竖琴提示;VS重新启动后,当鼠标移到曲线上方时,R#灯泡开始出现(有时)。红色下划线应表示无法编译。您是否尝试过重新启动VS?我相信这是特定于您的设置的:警告不会在我的代码中显示为“红色、扭曲的下划线”。visual studio重新启动后,当下划线高亮显示时,ReSharper将其灯泡显示在左侧,表明这只是其中一个重竖琴警告。你能用我的答案关闭它吗?你没有回答,只是一句评论。