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)
。编译器有很多问题 - 幸运的是,大多数似乎都很容易解决。
考虑这个在 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)
。编译器有很多问题 - 幸运的是,大多数似乎都很容易解决。