【问题标题】:Why does enum.ToString() give a different result than what's shown in the debugger tooltip?为什么 enum.ToString() 给出的结果与调试器工具提示中显示的结果不同?
【发布时间】:2010-01-12 21:32:10
【问题描述】:

测试程序(.NET 2.0):

[Flags]
enum MyEnum
{
    Member1 = 1,
    Member2 = 2,
}

class Program
{
    // Inspecting r shows "Member1 | Member2"
    MyEnum r = MyEnum.Member1 | MyEnum.Member2;

    // s = "Member1, Member2"
    string s = r.ToString();
}

我本来希望.ToString() 返回一个字符串,其中的成员用管道分隔,但事实并非如此。

奖励信息:在逗号分隔的字符串上调用 Enum.Parse() 成功,而为其提供管道分隔的字符串失败。

【问题讨论】:

  • 额外信息——您可以使用 [DebuggerDisplayAttribute] 覆盖调试器显示您自己的类的方式
  • 感谢您的提示 -- 我一直想知道这是怎么做到的。

标签: c# .net enums tostring


【解决方案1】:

VS 调试器使用可视化工具来显示值。只有在没有特定数据类型的可视化工具时,它才会回退到 .ToString() 方法。

更多关于可视化工具的信息:

http://msdn.microsoft.com/en-us/library/zayyhzts.aspx

【讨论】:

    【解决方案2】:

    标记为FlagsAttribute 的枚举的默认ToString 实现是一个逗号分隔的列表。但是,调试器中显示的不一定是 ToString 结果 - 必须为枚举设置一个调试器可视化工具,使用按位 OR 符号或管道呈现值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2010-10-29
      相关资源
      最近更新 更多