空传播 - 第二次空检查

时间:2017-06-19 07:36:59

标签: c# null-propagation-operator

我想在theme.VersionStamp上插入另一个空检查。有没有办法可以将它插入到SequenceEqual参数中?

if (theme.VersionStamp != null)
{ 
    if (!origTheme?.VersionStamp.SequenceEqual(theme.VersionStamp) ?? false)
    {
        throw new TwConcurrencyException();
    }
}

2 个答案:

答案 0 :(得分:1)

它不是必需的,因为无论如何你正在进行空检查if (theme.VersionStamp != null){然后继续进行。但你仍然可以再次检查并传入一个默认参数,如

if (!origTheme?.VersionStamp.SequenceEqual(theme.VersionStamp ?? new VersionStamp()) ?? false)

另外,我会将您的第一张null支票延长至

if (theme != null && theme.VersionStamp != null)
{ 

答案 1 :(得分:1)

不幸的是,在传递参数时添加空检查是不可能的。

你能得到的最短时间是:

if (theme?.VersionStamp == null || 
    !origTheme?.VersionStamp?.SequenceEqual(theme.VersionStamp) ?? false)
{
    throw new TwConcurrencyException();
}

我不会像Rahul那样传递默认参数,因为如果VersionStamp的{​​{1}}等于默认origTheme VersionStamp则会错误地返回{ {1}}