C#可为空类型-通用模式

时间:2019-11-04 20:57:57

标签: c# nullable

通常在使用可为空的类型时,我会在代码内得到以下模式(测试值,调用函数):

Type? a; 

if(a.HasValue)
{
    SomeFunction(a.Value);
}

这是否有一些聪明的速记?这个图案有名字吗?也许这个问题被误导了,我应该以不同的方式使用可空值...

3 个答案:

答案 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);