为什么我在此代码中的输出参数上得到代码分析 CA1062?
我有一个非常简单的代码(从原始代码简化 - 所以我知道这不是一个非常聪明的代码),当我在 Visual Studio 2010 中使用代码分析进行编译时,会发出警告 CA1062:验证公共方法的参数。
public class Foo
{
protected static void Bar(out int[] x)
{
x = new int[1];
for (int i = 0; i != 1; ++i)
x[i] = 1;
}
}
我收到的警告:
CA1062:Microsoft.Design:在 外部可见方法 'Foo.Bar(out int[])',验证局部变量 '(*x)',从重新分配 参数“x”,在使用之前。
我不明白为什么会收到此警告以及如何在不抑制它的情况下解决它? new
可以返回 null
吗?这是 Visual Studio 2010 的错误吗?
更新
我决定打开Microsoft Connect 上的错误报告。
I have a very simple code (simplified from the original code - so I know it's not a very clever code) that when I compile in Visual Studio 2010 with Code Analysis gives me warning CA1062: Validate arguments of public methods.
public class Foo
{
protected static void Bar(out int[] x)
{
x = new int[1];
for (int i = 0; i != 1; ++i)
x[i] = 1;
}
}
The warning I get:
CA1062 : Microsoft.Design : In
externally visible method 'Foo.Bar(out
int[])', validate local variable
'(*x)', which was reassigned from
parameter 'x', before using it.
I don't understand why do I get this warning and how can I resolve it without suppressing it? Can new
return null
? Is this a Visual Studio 2010 bug?
UPDATE
I've decided to open a bug report on Microsoft Connect.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我已在 Visual Studio 2010 Premium 中重现了此内容,代码与给定的代码完全相同,并且在分析设置中启用了Microsoft All Rules。
看起来这是一个错误(请参见此处的底部:http://msdn. microsoft.com/en-us/library/ms182182.aspx)。抱怨您在使用它之前没有检查
x
是否不为空,但它位于out
参数上,因此没有输入值可供检查!I've reproduced this in Visual Studio 2010 Premium with the code exactly as given and with Microsoft All Rules enabled in the analysis settings.
It looks like this is a bug (see bottom of here: http://msdn.microsoft.com/en-us/library/ms182182.aspx). It is complainng that you are not checking that
x
is not null before using it, but it's onout
parameter so there is no input value to check!展示比描述更容易:
正确的方法是:
It's easier to show than to describe :
And the correct way is :