小编典典

禁止在C#中使用“从不使用”和“从不分配给”警告

c#

我在C#项目中有一个HTTPSystemDefinitions.cs文件,该文件基本上描述了较旧的Windows ISAPI,供托管代码使用。

这包括与ISAPI相关的完整结构集,而不是全部或被代码使用。在编译时,这些结构的所有字段成员都将引起如下警告:

警告字段’UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.SetHeader’从未分配给该字段,并且其默认值始终为null

要么

警告从未使用字段’UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.HttpStatus’

这些可以禁用#pragma warning disable吗?如果是这样,相应的错误号是什么?如果没有,我还能做什么?请记住,我只是要对此文件执行此操作,重要的是我可以看到其他文件发出的此类警告。

编辑

示例结构:-

struct HTTP_FILTER_PREPROC_HEADERS
{
    //
    //  For SF_NOTIFY_PREPROC_HEADERS, retrieves the specified header value.
    //  Header names should include the trailing ':'.  The special values
    //  'method', 'url' and 'version' can be used to retrieve the individual
    //  portions of the request line
    //

    internal GetHeaderDelegate GetHeader;
    internal SetHeaderDelegate SetHeader;
    internal AddHeaderDelegate AddHeader;

    UInt32  HttpStatus;               // New in 4.0, status for SEND_RESPONSE
    UInt32  dwReserved;               // New in 4.0
}

阅读 1455

收藏
2020-05-19

共1个答案

小编典典

是的,这些可以被抑制。

通常,我反对抑制警告,但是在这种情况下,用于互操作的结构绝对需要存在一些字段,即使您从未打算(或可以)使用它们,因此在这种情况下,我认为这应该是有道理的。

通常,要禁止这两个警告,您将修复有问题的代码。第一个(“ …永不使用”)通常是早期版本代码遗留下来的代码气味。也许代码已删除,但字段留在后面。

第二个通常是针对错误使用字段的代码气味。例如,您可能会错误地将属性的新值写回到属性本身,而不要写入后备字段。


要禁止显示“ 从不使用字段XYZ ”的警告,请执行以下操作:

#pragma warning disable 0169
... field declaration
#pragma warning restore 0169

要取消警告“ 字段XYZ从未分配给它,并且将始终具有其默认值XX ”,请执行以下操作:

#pragma warning disable 0649
... field declaration
#pragma warning restore 0649

要自己找到此类警告编号(即,我怎么知道使用0169和0649),请执行以下操作:

  • 正常编译代码,这会将一些警告添加到Visual Studio中的错误列表中
  • 切换到“输出”窗口和“生成”输出,并寻找相同的警告
  • 从相关消息中复制4位数的警告代码,该代码应如下所示:

C:\ Dev \ VS.NET \ ConsoleApplication19 \ ConsoleApplication19 \
Program.cs(10,28):警告CS 0649
:从未将字段’ConsoleApplication19.Program.dwReserved’分配给该字段,并且其默认值始终为0


警告 :根据@Jon Hanna的评论,可能为此发出了一些警告,以供将来查找此问题和答案的人使用。

  • 首先,也是最重要的是,抑制警告的行为类似于吞咽头痛药。当然,有时候这样做是正确的事,但这不是万能的解决方案。有时,头痛是您不应该掩盖的真实症状,与警告相同。始终最好尝试通过修正警告原因来处理警告,而不是仅仅从构建输出中盲目删除警告。
  • 话虽如此,如果您需要取消警告,请遵循我上面列出的模式。第一行代码#pragma warning disable XYZK禁用该 文件其余部分 的警告,或者至少直到#pragma warning restore XYZK找到相应的警告为止。最小化您禁用这些警告的行数。上面的模式仅对一行禁用警告。
  • 而且,正如乔恩(Jon)所提到的,评论为什么这样做是一个好主意。禁用警告绝对是毫无道理的代码气味,而注释将阻止将来的维护人员花时间去想为什么这样做,或者甚至删除它并尝试修复警告。
2020-05-19