当前位置: 首页 > 知识库问答 >
问题:

C#.NET中的可选返回

苏坚成
2023-03-14

Java1.8正在接收可选的 类,它允许我们显式地说明一个方法何时可能返回空值,并在使用它之前“强制”它的使用者验证它是否为空(ispresent())。

我看到C#有nullable ,它执行类似的操作,但使用的是基本类型。它似乎用于DB查询,以区分值是否存在且为0,以及值是否不存在且为NULL。

但似乎C#的nullable 对对象不起作用,只对基本类型起作用,而Java的optional 只对对象起作用,对基本类型不起作用。

在C#中是否有一个可为空的/可选的类,迫使我们在提取和使用object之前测试它是否存在?

共有1个答案

柯鸿云
2023-03-14

不是用这种语言,不是,但你可以自己写:

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 的某些行为,例如将一个无值的可空值装箱为null的能力,而不是装箱的可空值,因为它具有对该行为(以及其他一些行为)的特殊编译器支持。

 类似资料:
  • 问题内容: 如何通过使用和避免返回值? 例: 问题答案: 要返回可选值的值,或者返回默认值(如果可选值没有值),则可以使用。 请注意,我重写了查找最长名称的代码:您可以直接与比较器比较每个String的长度。可以通过调用键提取器作为方法引用来获得一个这样的比较器。

  • 是否有任何方法可以从NamedParameterJdbcTemplate返回可选的? 我的查询有时会返回空。所以我想要漂亮的方法来检查空。我不想做尝试捕捉空结果数据访问异常,因为这个有点丑。

  • 我正在做一个项目,最近开始使用MPAndroidChart。 我的MPAndroidChart可以正常工作并正确填充图表数据,但我希望有一种方法能够拖动并选择图表的一个区域。选择完成后,需要返回所选点的x值和y值。 我找不到任何方法来做我想做的事。我在中发现了这种突出显示功能https://github.com/PhilJay/MPAndroidChart/wiki/Highlighting但我认

  • 本文向大家介绍在.NET MVC C#中可以在哪些级别应用筛选器?,包括了在.NET MVC C#中可以在哪些级别应用筛选器?的使用技巧和注意事项,需要的朋友参考一下 在ASP .Net MVC应用程序中,可以在三个级别上应用过滤器。 行动方法水平 控制器级别 全球水平 行动方法水平 在“操作方法”级别应用的过滤器仅特别适用于该操作方法。 控制器级别 控制器级过滤器适用于所有操作方法。以下过滤器适

  • 我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:

  • Net-C 是一个跨平台的局域网聊天工具,支持表情、私信,设置用户状态、群组聊天等功能。 主界面如下图所示