C# Visual Studio 2015:无效;“演员阵容是多余的”;插值字符串表达式中的警告
考虑这个在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
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
。但这很有用,谢谢!