相关疑难解决方法(0)

创建将T限制为枚举的通用方法

我正在构建一个扩展Enum.Parse概念的函数

  • 允许在未找到枚举值的情况下解析默认值
  • 不区分大小写

所以我写了以下内容:

public static T GetEnumFromString<T>(string value, T defaultValue) where T : Enum
{
    if (string.IsNullOrEmpty(value)) return defaultValue;
    foreach (T item in Enum.GetValues(typeof(T)))
    {
        if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
    }
    return defaultValue;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个Error Constraint不能是特殊类System.Enum.

很公平,但是有一个解决方法允许Generic Enum,或者我将不得不模仿该Parse函数并将类型作为属性传递,这会迫使您的代码出现丑陋的拳击要求.

编辑以下所有建议都非常感谢,谢谢.

已经解决了(我已离开循环以保持不区分大小写 - 我在解析XML时使用它)

public static class EnumUtils
{
    public static T ParseEnum<T>(string value, T defaultValue) where T : struct, IConvertible
    {
        if (!typeof(T).IsEnum) throw new ArgumentException("T must be an enumerated type");
        if (string.IsNullOrEmpty(value)) return …
Run Code Online (Sandbox Code Playgroud)

c# generics enums generic-constraints

1122
推荐指数
12
解决办法
33万
查看次数

我应该如何将字符串转换为C#中的枚举?

在C#中将字符串转换为枚举值的最佳方法是什么?

我有一个包含枚举值的HTML选择标记.发布页面时,我想获取值(将以字符串的形式)并将其转换为枚举值.

在一个理想的世界里,我可以这样做:

StatusEnum MyStatus = StatusEnum.Parse("Active");
Run Code Online (Sandbox Code Playgroud)

但那不是有效的代码.

c# string enums

797
推荐指数
17
解决办法
63万
查看次数

如何声明一个泛型类型使用的枚举?

我想在父抽象类中声明以下内容:

  public abstract void RefreshDisplay<TView>(Enum value);
Run Code Online (Sandbox Code Playgroud)

然后将在子类中实现,如:

   public override void RefreshDisplay<RxViewModel>(RxViews view)
Run Code Online (Sandbox Code Playgroud)

其中RxViews是枚举,并从该枚举"查看"特定值.

直到运行时才会知道它来自的实际视图和枚举.

可以这样做吗?我很感激帮助.

编辑:我可能会问这个错误.TView不是枚举,而是从ViewModelBase继承的视图.(我不知道这是一个重复的问题?)谢谢.

编辑:我猜这是在4.5中修复的.任何想法如何在net 4.0中解决这个问题?

c# generics

4
推荐指数
1
解决办法
8679
查看次数

标签 统计

c# ×3

enums ×2

generics ×2

generic-constraints ×1

string ×1