【发布时间】:2018-09-16 05:51:44
【问题描述】:
我正在订阅一个可能为 null 的类生成的事件,如下所示:
if (eventGeneratingClass != null)
eventGeneratingClass.myEvent += myHandler;
在事件生成类中类似的构造
myEvent?.Invoke(this, new EventArgs());
可以使用。我想知道在(取消)订阅事件时是否可以使用类似的构造,例如:
eventGeneratingClass?.myEvent += myHandler;
eventGeneratingClass?.myEvent -= myHandler;
我都找到了 Is there a shorthand for addition assignment operator for nullables that sets the value if null? 和 How to call custom operator with Reflection
这导致我:Operator Overloading Usage Guidelines
这导致我尝试
eventGeneratingClass?.myEvent.op_AdditionAssignment(myHandler);
eventGeneratingClass?.myEvent.op_SubtractionAssignment(myHandler);
但似乎事件没有op_AdditionAssignment 成员函数或至少向我提供错误
事件 'EventGeneratingClass.myEvent' 只能出现在 += 或 -= 的左侧...
这是我卡住的地方...
【问题讨论】:
-
您可能正在寻找添加/删除 docs.microsoft.com/en-us/dotnet/csharp/language-reference/… .. 但是如果您的对象本身为空,我认为这不会起作用,因为不会没有什么可以调用添加/删除的,虽然没有尝试过
-
您正在寻找
eventGeneratingClass?.add_myEvent(myHandler),但这无论如何都不起作用,编译器会说“无法显式调用运算符或访问器”。因此,在这种情况下,您必须接受必须使用if的事实。