gpt4 book ai didi

c# - 在 C# 中抑制 "is never used"和 "is never assigned to"警告

转载 作者:IT王子 更新时间:2023-10-29 03:35:13 26 4
gpt4 key购买 nike

我在 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 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
}

最佳答案

是的,这些可以被抑制。

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

通常,要抑制这两个警告,您会修复有问题的代码。第一个(“...从未使用过”)通常是早期版本代码遗留下来的代码味道。也许代码已被删除,但留下了字段。

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


要抑制“Field XYZ is never used”的警告,您可以这样做:

#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 的评论,对于这个问题和答案的 future 发现者,也许有一些警告是为了这个。

  • 首先,也是最重要的,抑制警告的行为类似于吞下治疗头痛的药丸。当然,有时这样做可能是正确的,但这不是万能的解决方案。有时,头痛是您不应该掩盖的真实症状,与警告一样。始终最好尝试通过解决警告的原因来处理警告,而不是盲目地将它们从构建输出中删除。
  • 话虽如此,如果您需要抑制警告,请遵循我上面列出的模式。第一个代码行,#pragma warning disable XYZK,为该文件的其余部分禁用警告,或者至少直到相应的#pragma warning restore XYZK 找到了。尽量减少禁用这些警告的行数。上面的模式仅禁用一行警告。
  • 此外,正如 Jon 提到的那样,对您这样做的原因发表评论是个好主意。无缘无故地禁用警告绝对是一种代码味道,注释将防止 future 的维护者花时间想知道你为什么这样做,甚至删除它并尝试修复警告。

关于c# - 在 C# 中抑制 "is never used"和 "is never assigned to"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com