"演员是多余的"返回否定布尔时发出警告

时间:2016-04-02 05:32:47

标签: c# casting visual-studio-2015 roslyn

以下程序在Visual Studio 2015 Update 2中编译得很好,但是" Cast是多余的"生成警告:

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        bool negated = p.NegateBool(true);
    }

    public bool NegateBool(object value)
    {
        // "Cast is redundant" warning.
        return !(bool)value;

        // No warning.
        //return (bool)value;

        // No warning.
        //var negated = !(bool)value;
        //return negated;
    }
}

接受"快速修复"建议删除演员,该程序不再编译。

只有在直接在return语句中完成转换并且使用了否定运算符时才会发生这种情况。

如果将结果放入变量然后返回,则不会生成警告。

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

这是Roslyn编译器中的一个错误。

我已经向Github提交了一份错误报告,问题将在未来版本中修复:
https://github.com/dotnet/roslyn/issues/10311

答案 1 :(得分:-2)

bool negated = p.NegatedBool(true);

编译器已经知道你正在传递和布尔值。 尝试truee而不是true,它会给你一个错误。如果你键入true,编译器知道它是来自system.boolean的布尔值,只需将鼠标悬停在true即可。  所以现在编译器已经知道它是一个bool。 只需在方法第一行上添加一个调试点。那是开口大括号,然后去调试。如果您在值上添加监视,您将知道它可能在其类型中显示类似此对象{bool}的内容。

相关问题