gpt4 book ai didi

c# - C#.Net 中的可选返回

转载 作者:IT王子 更新时间:2023-10-29 03:56:22 25 4
gpt4 key购买 nike

Java 1.8 正在接收 Optional<T>类,它允许我们明确说明方法何时可能返回 null 值并“强制”其使用者在使用它之前验证它是否不为 null (isPresent())。

我看到 C# 有 Nullable<T> ,它做了类似的事情,但使用的是基本类型。它似乎用于数据库查询,以区分值何时存在且为 0 以及何时不存在且为 null。

但似乎 C# 的 Nullable<T>不适用于对象,仅适用于基本类型,而 Java 的 Optional<T>仅适用于对象而不适用于基本类型。

C# 中是否有 Nullable/Optional 类,强制我们在提取和使用对象之前测试对象是否存在?

最佳答案

不是在语言中,不,但你可以自己制作:

public struct Optional<T>
{
public bool HasValue { get; private set; }
private T value;
public T Value
{
get
{
if (HasValue)
return value;
else
throw new InvalidOperationException();
}
}

public Optional(T value)
{
this.value = value;
HasValue = true;
}

public static explicit operator T(Optional<T> optional)
{
return optional.Value;
}
public static implicit operator Optional<T>(T value)
{
return new Optional<T>(value);
}

public override bool Equals(object obj)
{
if (obj is Optional<T>)
return this.Equals((Optional<T>)obj);
else
return false;
}
public bool Equals(Optional<T> other)
{
if (HasValue && other.HasValue)
return object.Equals(value, other.value);
else
return HasValue == other.HasValue;
}
}

请注意,您将无法模拟 Nullable<T> 的某些行为,例如将没有值的可空值装箱为空的能力,而不是装箱的可空值,因为它具有对该(和其他一些)行为的特殊编译器支持。

关于c# - C#.Net 中的可选返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16199227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com