You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:27:26