可为null类型的优雅模式

本文关键字:模式 null 类型 可为 | 更新日期: 2023-09-27 18:21:55

我有以下构造:

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

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

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

可为null类型的优雅模式

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

选项包括:

  1. 当参数为null时,将f更改为返回null
  2. 制作一个扩展方法

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

我能想到的最接近的是null合并运算符"??"

来自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的类型,因此无论如何都需要一个类型吗?