Visual Studio 2015:内插字符串表达式中的 "Cast is redundant" 警告无效

Visual Studio 2015: Invalid "Cast is redundant" warning in interpolated string expression

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

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}");
    }
}

... 按预期输出:

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

然而,Visual Studio 2015 一直建议在这一行上写一个 "Quick Action":

// "Cast is redundant" warning
Console.WriteLine($"The direction is {(int)Direction.Right}");

它坚持 (int) "cast is redundant",并建议作为对 "Remove Unnecessary Cast"[=31 的潜在修复=],这当然是错误的,因为它会改变结果。

有趣的是,它没有给我任何等效语句的警告:

// No warnings.
Console.WriteLine(string.Format("The direction is {0}", (int)Direction.Right));

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

这是a known bug

同时提出了临时修复:

For people experiencing this bug in VS2015 now, a workaround is to suppress warning IDE0004 in the build tab of the property pages of the affected project.

已于 2015 年 9 月 9 日在 PR 5029 中修复并合并到 master 中。

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

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

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