通常可以在这里找到这样的问题的答案,或者如果不是在这里,可以在MSDN上找到,但我看了看,但没有找到答案.实验似乎表明代码如下:
SomeControl.Click += null;
Run Code Online (Sandbox Code Playgroud)
没有害处.或者至少触发事件并不会通过尝试调用null事件侦听器来抛出异常(我可以告诉).然而,似乎无处将验证我希望,这样的代码是不是做至少在网络上的东西,我可能不想做.例如,导致Click事件认为它有听众,当它可能没有时,并且在"现在让我们执行空检查并调用所有非空的侦听器"代码中浪费那些非常珍贵的超超微秒.
似乎文档应该说明如果RHS上的监听器为空,+ =和 - =运算符的行为是什么.但就像我说的那样,我无法在任何地方找到该文档.我相信这里有人可以提供它,但....
(显然,我的代码没有硬编码的null;我的问题更多的是关于这样的代码是浪费还是完全无害:
public static void AddHandlers([NotNull] this Button button,
[CanBeNull] EventHandler click = null,
[CanBeNull] EventHandler load = null)
{
button.Click += click;
button.Load += load;
}
Run Code Online (Sandbox Code Playgroud)
或者如果我[ 因为任何原因需要 ]在每个这样的+ =操作周围添加空检查.)
我有一个 .NET 7.0 WinForms 项目,该项目在其属性中声称将语言版本设置为 11.0(并且我在 .csproj 中进行了操作以使其成为“最新”和“预览”等)。
ReSharper 的检查表明我可以field在很多地方使用该关键字,但是当我这样做时,VS 讨厌重构的结果,并且我会收到编译错误(“名称‘字段’在当前上下文中不存在”等) 。
我完全不明白为什么我的 VS(我什至尝试过预览版——我使用的是 Professional 2022 版本 17.5.0 预览版 6.0)不想喜欢 C# 11。
这是我安装的 SDK 的内容,以防万一出现问题......
C:\>dotnet --list-sdks
7.0.103 [C:\Program Files\dotnet\sdk]
7.0.200-preview.22628.1 [C:\Program Files\dotnet\sdk]
7.0.200 [C:\Program Files\dotnet\sdk]
Run Code Online (Sandbox Code Playgroud)
这是产生错误的代码区域之一。
前
C:\>dotnet --list-sdks
7.0.103 [C:\Program Files\dotnet\sdk]
7.0.200-preview.22628.1 [C:\Program Files\dotnet\sdk]
7.0.200 [C:\Program Files\dotnet\sdk]
Run Code Online (Sandbox Code Playgroud)
后
private int _updateDepth; // this is "grayed" by R# with hint to address
private int UpdateDepth
{
get => _updateDepth;
set
{
_updateDepth = value;
if (!SkipHandlers && …Run Code Online (Sandbox Code Playgroud)