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

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

这包括与ISAPI相关的完整的结构集,并非全部或由代码消耗。在编译时,这些结构的所有字段成员都会导致类似以下的警告: –

Warning Field ‘UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.SetHeader’ is never assigned to, and will always have its default value null

要么

Warning The field ‘UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.HttpStatus’ is never used

是否可以禁用#pragma warning disable?如果是这样,相应的错误号是什么?如果没有,还有什么我可以做吗?记住,我只有这样做这个文件,它的重要,我看到类似这些来自其他文件的警告。

编辑

示例struct: –

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
}
是的,这些可以抑制。

通常情况下,我反对抑制警告,但在这种情况下,用于interop的结构绝对需要一些字段存在,即使你从来不打算(或可以)使用它们,所以在这种情况下,我认为应该是合理的。

通常,要抑制这两个警告,您将修复违规代码。第一个(“…从不使用”)通常是代码的气味从早期版本的代码的剩菜。也许代码已删除,但字段留下。

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

要禁止“字段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中的错误列表中添加一些警告
>切换到Output窗口和Build输出,并寻找相同的警告
>从相关消息中复制4位数警告代码,其格式应如下所示:

C:\Dev\VS.NET\ConsoleApplication19\ConsoleApplication19\Program.cs(10,28):
warning CS0649: Field ‘ConsoleApplication19.Program.dwReserved’ is never
assigned to, and will always have its default value 0

注意:根据@Jon Hanna的评论,也许几个警告是为了这个,为这个问题和答案的未来寻找者。

>首先,最重要的是,抑制警告的行为类似于吞咽药物头痛。当然,这可能是有时做的正确的事情,但它不是一个全面的解决方案。有时,头痛是一个真正的症状,你不应该掩盖,与警告一样。总是最好尝试通过固定其原因来处理警告,而不是盲目地从构建输出中删除它们。
>说到这里,如果你需要抑制一个警告,请按照我上面的模式。第一个代码行#pragma warning禁用XYZK,禁用该文件其余部分的警告,或至少直到找到相应的#pragma警告恢复XYZK。最小化禁用这些警告的行数。上面的模式仅禁用一行的警告。
>另外,正如Jon提到的,关于你为什么这样做的评论是一个好主意。禁用警告绝对是一个代码气味,当完成没有原因,并且注释将防止未来的维护者花时间不知道为什么你这样做,或甚至删除它,并试图修复警告。

http://stackoverflow.com/questions/3820985/suppressing-is-never-used-and-is-never-assigned-to-warnings-in-c-sharp

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在C#中禁止“从不使用”和“从不分配给”警告。