我如何摆脱“ [某些事件]从未使用过”的编译器警告?

问题描述 投票:0回答:5
,例如,我收到此编译器警告,

活动“ Company.SomeControl.SearchClick”从未使用过。

但我知道它被使用了,因为发表评论会像20个试图使用此事件的XAML页面的新警告一样!
什么给了什么?是否可以摆脱此警告?

这似乎是有污染的67
c# .net wpf events compiler-warnings
5个回答
189
投票

#pragma warning disable 67 不要忘记尽快(事件声明之后)尽快恢复它:

#pragma warning restore 67

,但是,我会再次检查并确保您在某个地方进行活动,而不是订阅它。编译器吐出20
战的事实,而不是20
errors
当您发表评论时,这也是可疑的...

也有关于此警告,特别是它如何应用于接口的有趣文章;关于如何处理“未使用”事件有一个很好的建议。重要部分是: 正确的答案是要明确您对事件的期望,在这种情况下,这是什么都没有的: public event EventHandler Unimportant { add { } remove { } } 这将干净地抑制警告,以及正常事件的额外编译器生成的实施。作为另一个额外的好处,它促使人们考虑这种不做的实施是否确实是最好的实施。例如,如果该事件并不是不重要的,那么确实依靠功能的客户可能会失败,那么最好明确地表明缺乏支持并通过投掷一个快速失败例外:

public event EventHandler Unsupported { add { throw new NotSupportedException(); } remove { } } 课程,可以在没有其功能的某些部分的情况下实现的一个接口有时表明该接口不是最佳凝聚力的,应将其分为单独的接口。

如果您被迫从接口实现事件,您的实现不需要您可以做以下操作以避免警告。
public event EventHandler CanExecuteChanged { add{} remove{} }

第二种最佳方法是,恕我直言,明确指出,如果有人试图订阅该事件,则不支持该事件。
public event RoutedEventHandler SearchClick { add { throw new NotSupportedException(); } remove { throw new NotSupportedException(); } }

作为一个变体,您也可以将
add

95
投票
remove

方法空白的方法默默地忽略事件上的订阅。

最好的解决方案是重构代码,也许在可能的情况下将事件的声明提交给实施者。
作为最后的手段,您也可以禁用这样的警告。
#pragma warning disable 67 public event RoutedEventHandler SearchClick; #pragma warning restore 67

22
投票

您也可以做以下操作:

public event EventHandler MyEvent = static delegate {};

编译器显然不知道它是在XAML代码中使用的。  尝试在您的事件定义中抑制警告。

,也要确保您实际上在某个地方举起活动。
    

你可以替代个别警告。

\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used

在这种情况下,CS0219是关于要分配但未使用的变量的警告。您可以使用 /nowarn:0219标志,也可以在项目的属性窗格中添加错误号(在“构建”下,请记住删除领先的CS)。请记住,这堂课的警告是

    

8
投票

或您可以向项目添加

<NoWarn>67</NoWarn>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>

1
投票

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.