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

C#如何通过Enum枚举将Guid映射为饮品名称并拼接为字符串

实现方案

注意:C# 枚举不支持直接使用 Guid 作为成员名(枚举成员名必须为合法标识符,不允许包含连字符),因此我们通过「自定义属性 + 扩展方法」的方式实现映射需求。

1. 定义Guid映射自定义属性

/// <summary>
/// 饮品枚举绑定Guid的自定义属性
/// </summary>
public class DrinkGuidAttribute : Attribute
{
    public Guid Guid { get; }
    public DrinkGuidAttribute(string guid)
    {
        Guid = Guid.Parse(guid);
    }
}

2. 定义饮品枚举

按你需要的映射关系给每个枚举成员绑定Display(存饮品名)和DrinkGuid(存对应Guid)即可:

using System.ComponentModel.DataAnnotations;

public enum Drinks
{
    [Display(Name = "Vodka")]
    [DrinkGuid("642E1905-1111-EC11-9FFF-00155E011509")]
    Vodka,
    // 剩下的Guid依次补充对应枚举项即可,示例:
    [Display(Name = "Whiskey")]
    [DrinkGuid("652E1905-1111-EC11-9FFF-00155E011509")]
    Whiskey,
    [Display(Name = "Rum")]
    [DrinkGuid("662E1905-1111-EC11-9FFF-00155E011509")]
    Rum
    // 剩余15个Guid按上述格式自行补充对应饮品名称即可
}

3. 编写Guid转饮品名的扩展方法

using System.Reflection;
using System.ComponentModel.DataAnnotations;

public static class DrinksExtension
{
    // 预缓存映射关系避免每次反射,提升性能
    private static readonly Dictionary<Guid, string> _drinkMapping = new Dictionary<Guid, string>();

    static DrinksExtension()
    {
        // 程序启动时一次性加载所有映射关系
        var enumType = typeof(Drinks);
        foreach (var field in enumType.GetFields(BindingFlags.Public | BindingFlags.Static))
        {
            var guidAttr = field.GetCustomAttribute<DrinkGuidAttribute>();
            var displayAttr = field.GetCustomAttribute<DisplayAttribute>();
            if (guidAttr != null && displayAttr != null)
            {
                _drinkMapping[guidAttr.Guid] = displayAttr.Name;
            }
        }
    }

    /// <summary>
    /// 将Guid转换为对应的饮品名称
    /// </summary>
    public static string ToDrinkName(this Guid drinkGuid)
    {
        return _drinkMapping.TryGetValue(drinkGuid, out var name) ? name : "未知饮品";
    }

    /// <summary>
    /// 兼容字符串格式Guid的重载
    /// </summary>
    public static string ToDrinkName(this string drinkGuidStr)
    {
        return Guid.TryParse(drinkGuidStr, out var guid) ? guid.ToDrinkName() : "未知饮品";
    }
}

4. 替换原有拼接逻辑

原来的Guid拼接代码:

string.Join(", ", model.DrinkList.Select(x => x.Id))

直接调用扩展方法即可得到饮品名拼接结果:

// 如果x.Id是Guid类型
string.Join(", ", model.DrinkList.Select(x => x.Id.ToDrinkName()))

// 如果x.Id是字符串类型的Guid
string.Join(", ", model.DrinkList.Select(x => x.Id.ToDrinkName()))

内容的提问来源于stack exchange,提问作者Jesus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:57:02