C# 奇怪的警告:“已分配,但从未使用其值”

C# 奇怪的警告:“已分配,但从未使用其值”,c#,compiler-construction,warnings,compiler-warnings,C#,Compiler Construction,Warnings,Compiler Warnings,为什么我的C代码中会出现以下警告 已分配专用字段xxxx,但从未使用其值 #pragma warning disable 414 // Attributes private b_myboolean = false; #pragma warning restore 414 该属性仅用作用户的标志。事实上,用户可以通过获取值false或true来了解某事物的状态 以下是创建此警告的代码示例: class Class1 { // Attributes private b_myb

为什么我的C代码中会出现以下警告

已分配专用字段xxxx,但从未使用其值

#pragma warning disable 414

// Attributes
private b_myboolean = false;

#pragma warning restore 414
该属性仅用作用户的标志。事实上,用户可以通过获取值false或true来了解某事物的状态

以下是创建此警告的代码示例:

class Class1 {

    // Attributes
    private b_myboolean = false;

    // Accessors
    public bool B_myboolean
    {
        get{ return b_myboolean;}
    }

     // Methods
     // Somewhere in a method
     b_myboolean =true;

}

类似的东西将返回警告。为什么?我必须以另一种方式对该标志进行编码吗?

此警告只是为了向您表明,它从未在您的代码中明确使用过

很多时候,您会在try-catch语句或其他条件语句中收到此警告


这没什么好担心的,只是提醒您仔细检查代码,以确保您没有浪费声明。

您发布的代码根本无法编译,更不用说显示正确的警告了。。。但我猜您的实际代码如下所示:

private bool b_myboolean;

public bool B_myboolean
{
    get { return B_myboolean; } // Bug!
}
private bool isClosing;
现在,这永远不会使用字段-因为属性将递归地调用自身


当然,这只是一个猜测——如果您将代码更新为更真实的代码,我们可以肯定地说。

您可以禁用此特定警告

以下是两个可能导致警告的字段未使用或其值从未使用:

警告169:字段“xxx”从未使用过 警告414:字段“xxx”已分配,但其值从未使用过

#pragma warning disable 414

// Attributes
private b_myboolean = false;

#pragma warning restore 414

我还遇到了警告信息。一般来说,当然不应禁用警告。但仅仅围绕这个领域并不太引人注目。

对我来说,我得到了同样的警告,当我查看代码时,我确信它正在被使用

所以我有一个像这样的私人领域:

private bool b_myboolean;

public bool B_myboolean
{
    get { return B_myboolean; } // Bug!
}
private bool isClosing;
我甚至在构造函数中将其设置为false。然后在MouseClick事件中,我将其设置为True。那它怎么没被使用呢?然后我就明白了

你看,仅仅在我的代码中的不同位置将一个变量设置为一个值并没有使用它。它只是将它设置为不同的值。除非我在逻辑if语句中使用它,否则它实际上并没有被使用

你必须考虑一下…如果你真的想确定…继续删除所有你设置它为某个值的地方…你会发现你的代码仍然可以像删除之前一样工作

必须这样做,因为您从未将变量用于任何事情。同样,在整个代码中将变量设置为不同的值并不是在使用它

这就是聪明的Visual Studio

我正在使用

在我的例子中,我的代码中的所有内容都是正确的,但是我得到了相同的警告

我关闭了VisualStudio解决方案,然后重新打开它。成功了

这已经发生过很多次了


我猜这个问题是因为VisualStudio的bug

你能把真实的密码贴出来吗?您的示例无效C未声明您的类型,并且警告可能是由您的示例未显示的内容引起的。您的代码无效。。。你不能在类中以这种方式分配字段。好的,我试过了,但没有得到警告。即使进行了编辑,它仍然无效。你需要在第4行加一个bool,你也可以在第14行加一个函数存根。事实上,我认为这几乎总是需要担心的。如果你正在赋值却从未使用过它,很可能你认为你在使用它,但你在某个地方搞砸了。@Jon:当然,编译器不知道你想在“调试监视”窗口中通过反射读取哪些变量。不确定p/invoke场景是否也会错误地触发此警告。所以听起来几乎总是准确的。@Ben:绝对是通过反射来阅读的——我会用一个警告来消除杂注。仅为调试会话保留状态?哎呀!你怎么看待这样的事情:pragma warning disable 169414 private bool b_myboolean=false;pragma警告还原169414这是一个好方法吗?@Joze:没有看到你真正的代码,我们不可能知道你应该做什么。你完全正确。。。我只是试着写一些看起来像我的代码的东西。我现在就纠正它!说得好。在VS中,“未被使用”实际上意味着“未被用于任何有意义的事情”。字符串sNotUsed=;//-其他地方sNotUsed=sNotUsed.Trim;//-将删除警告,尽管实际上没有做任何有用的操作。