C# 如何确保火灾事件的安全,无论签名是什么?
鉴于我有不同签名的代表:C# 如何确保火灾事件的安全,无论签名是什么?,c#,delegates,C#,Delegates,鉴于我有不同签名的代表: public event Action Del1; public event Action<int> Del2; 以下方法适用于第一个委托,但当然不适用于第二个委托: protected void FireEvent( Action action ) { if( action != null ) { action(); } } 有什么我可以使用的基本行动吗 谢谢 如果您使用的是c6,则可以使用null条件运算符执行
public event Action Del1;
public event Action<int> Del2;
以下方法适用于第一个委托,但当然不适用于第二个委托:
protected void FireEvent( Action action )
{
if( action != null )
{
action();
}
}
有什么我可以使用的基本行动吗
谢谢 如果您使用的是c6,则可以使用null条件运算符执行该检查,而无需使用安全方法 利用空条件运算符,整个集合实现简化为: OnTemperatureChanged?调用此,值 我创建了一个.net fiddle来演示这一点: 它产生输出: 一个 两个12 一个是空的 两个12 二是零 完成
通常您可以安全地将操作称为:Action?.Invoke或Action?.invokeParam,这意味着您无论如何都需要签名。谢谢您的努力。是的,这很好,我们仍然使用.NET4.5,但这似乎是一个很好的未来解决方案。C版本与.NET版本是分开的。您应该能够在VS 2015和VS 2017中使用C 6功能。本文档描述了C 6(C的下一个版本)中的新语言功能。所有这些功能都在VS 2015中实现并可用。
protected void FireEvent( Action action )
{
if( action != null )
{
action();
}
}
using System;
public class Program
{
public static void Main()
{
Action actionOne = () => { Console.WriteLine("One"); };
Action<int> actionTwo = (int foo) => { Console.WriteLine("Two " + foo); };
actionOne?.Invoke();
actionTwo?.Invoke(12);
actionOne = null;
Console.WriteLine("One is null");
actionOne?.Invoke();
actionTwo?.Invoke(12);
actionTwo = null;
Console.WriteLine("Two is null");
actionOne?.Invoke();
actionTwo?.Invoke(12);
Console.WriteLine("Done");
}
}