相当于C#中的Java的Optional.orElse

时间:2017-09-01 03:59:00

标签: java c#

我正在寻找用于在null情况下提供默认值的漂亮语法。我已经习惯在Java中使用Optional&而不是null,并且想知道C#的更好的可空类型是否具有等价?

自选

Optional<String> x = Optional<String>.absent();
String y = x.orElse("NeedToCheckforNull"); //y = NeedToCheckforNull

@nullable

String x = null;
String y = x == null ? "NeedToCheckforNull" : x ; //y = NeedToCheckforNull

如何在C#中使上述内容更具可读性?

Javascript允许y = x | &#34; NeedToCheckforNull&#34;

4 个答案:

答案 0 :(得分:8)

您可以使用??运算符。

您的代码将更新为:

string x = null;
string y = x ?? "NeedToCheckforNull"; 

请参阅:https://msdn.microsoft.com/en-us/library/ms173224(v=vs.100).aspx

答案 1 :(得分:4)

c#具有特殊的Nullabel<>类型,可以用作int? decimal?等, 这些可以通过使用提供默认值 .GetValueOrDefault() T GetValueOrDefault(T defaultValue)

并且??也适用于像上面的anwsers这样的可空类型。 string x = null; Console.WriteLine(x ?? "NeedToCheckforNull");

答案 2 :(得分:1)

我已经创建了自己的

public class Optional<T> {
    private T value;
    public bool IsPresent { get; private set; } = false;

    private Optional() { }

    public static Optional<T> Empty() {
        return new Optional<T>();
    }

    public static Optional<T> Of(T value) {
        Optional<T> obj = new Optional<T>();
        obj.Set(value);
        return obj;
    }

    public void Set(T value) {
        this.value = value;
        IsPresent = true;
    }

    public T Get() {
        return value;
    }
}

答案 3 :(得分:0)

考虑使用language extensions选项类型

int x = optional.IfNone("NeedToCheckforNull");