可空类型的优雅模式

时间:2015-11-15 13:24:27

标签: c# ternary-operator c#-6.0 null-conditional-operator

我有以下结构:

MyType y = x.HasValue ? f(x) : null;

我知道fx的成员时可以使用的简单模式:MyType y = x.?f();

是否有类似的方法来简化上述代码而不更改f的定义?

2 个答案:

答案 0 :(得分:0)

目前(2015年11月),C#中不存在此类机制。

选项包括:

  1. 当参数为f
  2. 时,将null更改为返回null
  3. 制作扩展方法
  4. static R Call<P>(this P? parameter, Func<P, R> func)
    {
        if (parameter.HasValue)
            return func(parameter.Value);
        else
            return default(R);
    }
    

答案 1 :(得分:0)

我能想到的最接近的是空合并运算符'??'

来自MSDN

// Set y to the value of x if x is NOT null; otherwise
// if x == null, set y to -1
y = x ?? -1;

假设f()可以处理x nullreturn null如果没有,那么你可以MyType y = f(x),这听起来是你最好的选择。请记住,除了更改处理x为null的函数之外的任何事情都需要你记住自己做,以及记住原因,从而创造空间来拍摄你自己的脚并删除一层抽象。

另外,f(x)是否采用可以为空的类型并因此期待一个?