Visual Studio 2015:无效" Cast是多余的"插值字符串表达式中的警告

时间:2015-08-25 14:38:52

标签: c# casting visual-studio-2015 string-interpolation c#-6.0

考虑这个在Visual Studio 2015中编译良好的简单程序:

BorderColor

...按预期输出:

public class Program
{
    enum Direction
    {
        Up,
        Down,
        Left,
        Right
    }

    static void Main(string[] args)
    {
        // Old style
        Console.WriteLine(string.Format("The direction is {0}", Direction.Right));
        Console.WriteLine(string.Format("The direction is {0}", (int)Direction.Right));

        // New style
        Console.WriteLine($"The direction is {Direction.Right}");
        Console.WriteLine($"The direction is {(int)Direction.Right}");
    }
}

然而,Visual Studio 2015一直在暗示一个" Quick Action"特此在这条线上:

The direction is Right
The direction is 3
The direction is Right
The direction is 3

它坚持认为// "Cast is redundant" warning Console.WriteLine($"The direction is {(int)Direction.Right}"); "演员阵容是多余的" ,并暗示可以解决"删除不必要的演员" ,这当然是错误的,因为它会改变结果。

有趣的是,它没有给我任何相应声明的警告:

(int)

当在插值字符串中使用表达式时,有人能为这种误报提供合理的解释吗?

2 个答案:

答案 0 :(得分:8)

这是a known bug

同时提出临时修复:

  

对于现在在VS2015中遇到此错误的人,解决方法是在受影响项目的属性页的构建选项卡中禁止警告IDE0004。

这已修复并于2015年9月9日在PR 5029合并为主人。

答案 1 :(得分:3)

显式强制转换 在某种程度上是不必要的 - 您可以(也可能应该)使用格式说明符:

$"The direction is {Direction.Right:d}"

但是,是的,警告是愚蠢的 - 它应该建议这种改变,而不仅仅是删除(int)。编译器有很多问题 - 幸运的是,大多数似乎很容易解决。