通常在使用可为空的类型时,我会在代码内得到以下模式(测试值,调用函数):
Type? a;
if(a.HasValue)
{
SomeFunction(a.Value);
}
这是否有一些聪明的速记?这个图案有名字吗?也许这个问题被误导了,我应该以不同的方式使用可空值...
答案 0 :(得分:4)
空条件语句可以做到这一点,但是要使其正常工作,您需要使SomeFunction成为Type的扩展方法
public static void SomeFunction(this Type? a)
{
// do stuff
}
那么您就可以
Type? a;
a?.SomeFunction()
答案 1 :(得分:0)
在WPF / UWP中,我们经常不得不处理向每个属性添加更改通知的问题。这段代码是重复的和冗长的。人们确实学会了抽象的技巧。通常将实际值存储在某种String Key集合中。然后,Wich处理所有更改通知。
一种简单的方法(正如其他人所说的)是对空条件运算符使用Expansion方法。大量的麻烦很快就会变得很乏味。
也许您可以进行类似于TryParse模式的操作?它通过out参数为您提供正常的解析结果,并且返回值指示解析是否失败。除非在这种情况下,否则您将函数作为委托传递,如果由于空值而失败,将获得返回值?
静态(因此不可覆盖)Equals Method在执行空检查后将实例(因此可覆盖)调用一个。但是在这种情况下,null是两个值的有效输入。
但是在所有情况下,您仍然需要一种方法来告知操作由于空值而失败。因此,您不会真正绕过检查某事。
答案 2 :(得分:0)
如果SomeFunction
花费Type
,则需要通过a.Value
,此处没有捷径。
顺便说一句。如果您对a.HasValue
感到厌恶,那么if(p != null)
是另一种选择。
void SomeFuntion(int i) {Console.WriteLine(i);}
int? p = null;
if(p != null) SomeFuntion(p.Value);