gpt4 book ai didi

c# - 无法分配条件访问表达式 - C# 空传播 += 事件

转载 作者:太空狗 更新时间:2023-10-29 19:54:41 26 4
gpt4 key购买 nike

我最喜欢添加的 C# 功能之一是 CS6 中的“null-propagation”。

这为我们许多人清理了很多代码。

我遇到过这似乎不可能的情况。我不确定为什么,因为我认为 null-propagation 只是一些编译器魔法,可以为我们做一些 null 检查,让我们维护更清晰的代码。

在 Hook 到事件的情况下..

 public override void OnApplyTemplate()
{
_eventStatus = base.GetTemplateChild(PART_EventStatus) as ContentControl;

// This not permitted and will not compile
_eventStatus?.IsMouseDirectlyOverChanged += EventStatusOnIsMouseDirectlyOverChanged;

// but this will work
if(_eventStatus != null) _eventStatus.IsMouseDirectlyOverChanged += EventStatusOnIsMouseDirectlyOverChanged;

base.OnApplyTemplate();
}

private void EventStatusOnIsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
throw new NotImplementedException();
}

编译输出显示:

 error CS0079: The event 'UIElement.IsMouseDirectlyOverChanged' can only appear on the left hand side of += or -=

Resharper Complaint

所以,我的问题是 - 我对空传播有什么误解?为什么这不是允许的语法?

最佳答案

这是设计使然。空值传播运算符允许在计算表达式时传播空值,但它不能用作赋值的目标。

这样想:运算符返回一个。但是,您需要在赋值的左侧有一个变量。在那里拥有值(value)是没有意义的。

issue已就此打开,目前作为功能请求打开。我们当时得到的回复是这样的:

The ?. Operator never produces an lvalue, so this is by design.

关于c# - 无法分配条件访问表达式 - C# 空传播 += 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45448672/

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