可空类型的优雅模式

Elegant pattern for nullable types

我有以下构造:

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

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

有没有类似的方法可以在不改变f定义的情况下简化上面的代码?

目前(2015年11月),C#中不存在这样的机制。

选项是:

  1. 当参数为null
  2. 时,将f改为returnnull
  3. 做一个扩展方法

static R Call<P>(this P? parameter, Func<P, R> func)
{
    if (parameter.HasValue)
        return func(parameter.Value);
    else
        return default(R);
}

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

来自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 成为 null 并且如果不能处理 return null,那么你可以只做 MyType y = f(x),这听起来像你的最好的选择。请记住,除了更改函数以处理 x 为 null 之外的任何事情都需要您记住自己做,并记住原因,从而为自己动手创造空间并移除抽象层。

此外,f(x) 不是采用可为 null 的类型,因此无论如何都期待一个吗?