空传播 - 第二空检查
问题描述:
我想在theme.VersionStamp插入另一个空检查。有没有一种方法可以将它插入SequenceEqual参数中?空传播 - 第二空检查
if (theme.VersionStamp != null)
{
if (!origTheme?.VersionStamp.SequenceEqual(theme.VersionStamp) ?? false)
{
throw new TwConcurrencyException();
}
}
答
它不是必需的,因为正确反正你制作的空检查if (theme.VersionStamp != null){
,然后出发。但是,你仍然可以再次检查和传递的默认参数一样
if (!origTheme?.VersionStamp.SequenceEqual(theme.VersionStamp ?? new VersionStamp()) ?? false)
另外,我想你的第一个null
检查延伸到下面
if (theme != null && theme.VersionStamp != null)
{
答
不幸的是,路过的时候一种说法是添加空校验不可能。
你可以得到最短的是:
if (theme?.VersionStamp == null ||
!origTheme?.VersionStamp?.SequenceEqual(theme.VersionStamp) ?? false)
{
throw new TwConcurrencyException();
}
我不会传似拉胡尔的默认参数是干什么的,因为如果origTheme
的VersionStamp
等于默认VersionStamp
SequenceEqual
会错误地返回true
+1
使用C#7和[Throw Expressions](https://github.com/dotnet/roslyn/issues/13389)现在可以这样做:'.SequenceEqual(theme.VersionStamp ?? throw new ArgumentException(...) )但是,在这个**案件中,由于前面的if语句,它是不必要的。 –
_“我想插入另一个空检查的主题”_ - 为什么?当你到达代码的那一部分时,你已经知道这个值不是'null'。那里有一个空检查的重点是什么?如果有一点,你想要什么样的空检查?你想要什么结果?解决你的问题,使其包含一个很好的[mcve],清楚地表明你正在做什么,解释代码的作用,以及你想要它做什么,以及具体是什么,你无法弄清楚。 –