以下程序在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语句中完成转换并且使用了否定运算符时才会发生这种情况。
如果将结果放入变量然后返回,则不会生成警告。
有谁知道为什么会这样?
答案 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}的内容。