【问题标题】:Cannot convert void to int when checking an int is within a range检查 int 在范围内时无法将 void 转换为 int
【发布时间】:2019-05-18 20:13:35
【问题描述】:

我正在使用这段代码,它给了我一个错误,说它不能将 void 转换为 int:

    private static int aBtn;
    public static int ABtn
    {
        get => aBtn;
        set => aBtn = CheckArgumentRange(nameof(value), value, 0, 5);
    }

    internal static void CheckArgumentRange(
        string paramName, int value, int minInclusive, int maxInclusive)
    {
        if (value < minInclusive || value > maxInclusive)
        {
            throw new ArgumentOutOfRangeException(paramName, value,
                $"Value should be in range [{minInclusive}-{maxInclusive}]");
        }
    }

谁能看到有什么问题以及为什么会出现此错误?

【问题讨论】:

  • set =&gt; aBtn 应该设置一个int 值,CheckArgumentRange() 返回void。如果范围检查正常,则返回value,否则返回aBtn
  • 抱歉,这当然都是我的错。我将在另一个问题中编辑答案。

标签: c#


【解决方案1】:

如果没有超出范围,您将需要返回该值。否则,该集合不会收到 int。
因此,只需在您的 if 之后添加return value;,您应该会很好。

编辑:当然还有将返回类型从 void 更改为 int。

    private static int aBtn;
    public static int ABtn
    {
        get => aBtn;
        set => aBtn = CheckArgumentRange(nameof(value), value, 0, 5);
    }

    internal static int CheckArgumentRange(
        string paramName, int value, int minInclusive, int maxInclusive)
    {
        if (value < minInclusive || value > maxInclusive)
        {
            throw new ArgumentOutOfRangeException(paramName, value,
                $"Value should be in range [{minInclusive}-{maxInclusive}]");
        }

        return value;
    }

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多