C# 枚举类型的扩展

可以将这些方法封装起来。

随机获得一个枚举

public static T RandomEnum<T>()
    {
        T[] results = Enum.GetValues(typeof(T)) as T[];
        Random random = new Random();
        T result = results[random.Next(0, results.Length)];
        return result;
    }

剔除exclude,再随机获得一个枚举

 public static T RandomEnum<T>(params T[] exclude)
    {
        T[] results = Enum.GetValues(typeof(T)) as T[];

        if (exclude != null)
        {
            results = results.Except(new List<T>(exclude)).ToArray();
        }
        Random random = new Random();
        T result = results[random.Next(0, results.Length)];
        return result;
    }

枚举转字符串

(T)System.Enum.Parse(typeof(T), "")

字符串转枚举

 public static T ToEnum<T>(this string value, T defaultValue = default(T))
    {
        if (value == null)
            return defaultValue;

        bool found = false;
        foreach (string name in Enum.GetNames(typeof(T)))
        {
            if (value == name)
            {
                found = true;
                break;
            }
        }

        if (!found)
            return defaultValue;

        T result = (T)Enum.Parse(typeof(T), value);
        if (result == null)
            return defaultValue;

        return result;
    }

每天进步一点点。

C#中,将枚举类型转换为`List`有多种实现方式。 ### 实现思路 可以利用扩展方法或普通静态方法来实现将枚举类型转换为`List`。扩展方法可以方便地通过枚举对象来获取相应枚举类型的所有枚举;普通静态方法则通过静态类调用,调用意图明确。 ### 代码示例 下面是一个使用普通静态方法将枚举转换为`List<EnumModel>`的示例: ```csharp using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; // 定义一个示例枚举 public enum MarkTypeEnum { [Description("类型1")] Type1 = 1, [Description("类型2")] Type2 = 2 } // 定义EnumModel类 public class EnumModel { public string Text { get; set; } public int Val { get; set; } public string Description { get; set; } } // 静态类用于包含转换方法 public static class EnumConverter { public static List<EnumModel> EnumToModelList<T>() where T : Enum { return Enum.GetValues(typeof(T)) .Cast<T>() .Select(value => { var fieldInfo = typeof(T).GetField(value.ToString()); var descriptionAttribute = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false) .FirstOrDefault() as DescriptionAttribute; var description = descriptionAttribute != null ? descriptionAttribute.Description : value.ToString(); return new EnumModel { Text = value.ToString(), Val = Convert.ToInt32(value), Description = description }; }) .ToList(); } } class Program { static void Main() { var enumList = EnumConverter.EnumToModelList<MarkTypeEnum>(); foreach (var item in enumList) { Console.WriteLine($"Text: {item.Text}, Val: {item.Val}, Description: {item.Description}"); } } } ``` ### 代码解释 1. **EnumModel类**:用于存储枚举的相关信息,包括枚举的名称(`Text`)、整数值(`Val`)和描述(`Description`) [^4]。 2. **EnumConverter类**:包含一个静态方法`EnumToModelList<T>`,该方法接受一个泛型参数`T`,该参数必须是枚举类型。方法内部通过`Enum.GetValues`获取枚举的所有值,然后遍历这些值,利用反射获取枚举成员的描述信息,并将其存储在`EnumModel`对象中,最后将这些对象添加到`List<EnumModel>`中返回。 3. **Main方法**:调用`EnumConverter.EnumToModelList<MarkTypeEnum>`方法将`MarkTypeEnum`枚举转换为`List<EnumModel>`,并遍历输出每个元素的信息。 ### 其他相关操作 在实际应用中,将枚举转换为`List`后,还可以将其绑定到下拉列表等控件上,例如: ```csharp // 假设comboBoxMarkType是一个ComboBox控件 comboBoxMarkType.Items.Clear(); var markTypeEnumList = EnumConverter.EnumToModelList<MarkTypeEnum>(); comboBoxMarkType.DataSource = markTypeEnumList; comboBoxMarkType.DisplayMember = "Description"; comboBoxMarkType.ValueMember = "Val"; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值