寻找C#中枚举格式字符串G与F输出不同的示例
C#枚举G与F格式输出不同的场景
要让G和F格式输出不同,核心在于利用两者的解析规则差异:
G格式优先匹配枚举中已定义的命名成员,只要值与某个命名成员完全相等,就输出该成员名称;F格式会忽略组合命名成员,直接根据二进制位,列出所有被设置的位对应的基础标志成员。
以下是具体示例:
示例代码
using System; [Flags] enum Permission { None = 0, Read = 1, Write = 2, ReadWriteCombined = 3, // 直接赋值为3,等价于Read | Write,但未用按位或定义 Delete = 4 } class Program { static void Main() { Permission access = Permission.ReadWriteCombined; Console.WriteLine(access.ToString("G")); Console.WriteLine(access.ToString("F")); Console.WriteLine(access.ToString("D")); Console.WriteLine(access.ToString("X")); } }
输出结果
ReadWriteCombined Read, Write 3 00000003
这里G格式匹配到了ReadWriteCombined这个命名成员,直接输出其名称;而F格式解析二进制位(3对应二进制11),列出所有对应位的基础成员Read和Write,两者输出完全不同。
另一种符合语法的场景(虽不符合Flags枚举最佳实践):当枚举值等于某个命名成员,但该成员的值是多个非2的幂成员的和,比如:
[Flags] enum NumberFlags { One = 1, Two = 2, Three = 3, Four = 4 }
当值为NumberFlags.Three时,G输出Three,F输出One, Two,同样能得到不同结果。
内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows
相关产品推荐
相关产品推荐

