考虑这个在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)
当在插值字符串中使用表达式时,有人能为这种误报提供合理的解释吗?
答案 0 :(得分:8)
这是a known bug。
同时提出临时修复:
对于现在在VS2015中遇到此错误的人,解决方法是在受影响项目的属性页的构建选项卡中禁止警告IDE0004。
这已修复并于2015年9月9日在PR 5029合并为主人。
答案 1 :(得分:3)
显式强制转换 在某种程度上是不必要的 - 您可以(也可能应该)使用格式说明符:
$"The direction is {Direction.Right:d}"
但是,是的,警告是愚蠢的 - 它应该建议这种改变,而不仅仅是删除(int)
。编译器有很多问题 - 幸运的是,大多数似乎很容易解决。