空Lambda vs Null参考检查C#

时间:2016-03-31 00:01:30

标签: c# .net lambda nullreferenceexception

我最近在Mahapps Metro上提出了关于潜在空引用异常的拉取请求

情况就是这个

    Action cleanUpHandlers = null;
    var cancellationTokenRegistration = DialogSettings.CancellationToken.Register(() =>
         {
             cleanUpHandlers();
             tcs.TrySetResult(ButtonStyle == MessageDialogStyle.Affirmative ? MessageDialogResult.Affirmative : MessageDialogResult.Negative);
         });
     cleanUpHandlers = () => {...

您可以看到DialogSettings.CancellationTokenDialogSettings.CancellationToken.Register()尝试调用cleanUpHandlers()之前取消Action cleanUpHandlers = new Action(()=>{});

我建议的修复

    var cancellationTokenRegistration = DialogSettings.CancellationToken.Register(() =>
         {
             if(cleanUpHandlers != null) cleanUpHandlers();
             tcs.TrySetResult(ButtonStyle == MessageDialogStyle.Affirmative ? MessageDialogResult.Affirmative : MessageDialogResult.Negative);
         });

我的问题是这是一个更好/更糟的解决方案

    var cancellationTokenRegistration = DialogSettings.CancellationToken.Register(() =>
         {
             cleanUpHandlers?.Invoke();
             tcs.TrySetResult(ButtonStyle == MessageDialogStyle.Affirmative ? MessageDialogResult.Affirmative : MessageDialogResult.Negative);
         });

或C#6

Operator

我认为有相当接近的等价物并且是我自己的项目我不会发布这个问题,但是我对这样一个项目的第一次贡献并且想要做对了

0 个答案:

没有答案