C# Visual Studio 2015:无效;“演员阵容是多余的”;插值字符串表达式中的警告

C# Visual Studio 2015:无效;“演员阵容是多余的”;插值字符串表达式中的警告,c#,casting,visual-studio-2015,string-interpolation,c#-6.0,C#,Casting,Visual Studio 2015,String Interpolation,C# 6.0,考虑这个在Visual Studio 2015中编译良好的简单程序: public class Program { enum Direction { Up, Down, Left, Right } static void Main(string[] args) { // Old style Console.WriteLine(string.Format("Th

考虑这个在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在这方面一直建议“快速行动”:

// "Cast is redundant" warning
Console.WriteLine($"The direction is {(int)Direction.Right}");
它坚持认为
(int)
“强制转换是多余的”,并建议作为一种潜在的修复方法“删除不必要的强制转换”,这当然是错误的,因为它会改变结果

有趣的是,它并没有给我任何警告:

// No warnings.
Console.WriteLine(string.Format("The direction is {0}", (int)Direction.Right));
当在插值字符串中使用表达式时,是否有人能为这种误报提供合理的解释

同时提出了一个临时解决方案:

对于现在在VS2015中遇到此错误的用户,解决方法是在受影响项目的属性页的“构建”选项卡中取消显示警告IDE0004

这已于2015年9月9日修复并合并到master中。

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

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

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

不知道可以在枚举上使用
d
格式说明符,而无需先强制转换。谢谢你的解决办法。当然,我在问题中没有提到这一点,但在我的实际问题中,我的字符串看起来更像
$“方向是{(int)direction.Right:X8}”
。所以我确实需要强制转换,否则我会得到一个
FormatException
。但这很有用,谢谢!