C# 4.0 无法调用泛型枚举类型作为参数的方法

C# 4.0 无法调用泛型枚举类型作为参数的方法,c#-4.0,generics,enums,C# 4.0,Generics,Enums,我有一个helper方法,它将空格放入枚举名称中,如下所示 public static string GetListItemString(Enum listItem) { string result = string.Empty; #region ELegalStatus if (listItem is ELegalStatus) { switch ((ELegalStat

我有一个helper方法,它将空格放入枚举名称中,如下所示

 public static string GetListItemString(Enum listItem)
        {
            string result = string.Empty;

#region ELegalStatus
            if (listItem is ELegalStatus)
            {
                switch ((ELegalStatus) listItem)
                {
                    case ELegalStatus.PrivateLimited:
                        result = "Private Limited";
                        break;
                    case ELegalStatus.PublicLimited:
                        result = "Public Limited";
                        break;
                   }
             }
#endregion


#region ERegion
            if (listItem is ERegion)
            {
                switch ((ERegion) listItem)
                {
                    case ERegion.EnglandandWales:
                        result = "England and Wales";
                        break;
                    case ERegion.NorthernIreland:
                        result = "Northern Ireland";
                        break;
                    case ERegion.Scotland:
                        result = "Scotland";
                        break;
                }
            }
            #endregion 

      return result;
    }
我正在创建一个将枚举转换为列表的方法,如下所示

public static object EnumToList<T>()
        {
            Type enumType = typeof (T);

            // Can't use type constraints on value types, so have to do check like this
            if (enumType.BaseType != typeof (Enum))
            {
                throw new ArgumentException("T must be of type System.Enum");
            }

            Array enumValArray = Enum.GetValues(enumType);

            foreach (var name in enumValArray)
            {
                var y = Enum.Parse(enumType, name.ToString().Trim(), true);                

               var x = ListHelper.GetListItemString(y);

            }

         return null;

        }
公共静态对象枚举列表()
{
类型enumType=typeof(T);
//无法对值类型使用类型约束,因此必须执行如下检查
if(enumType.BaseType!=typeof(Enum))
{
抛出新ArgumentException(“T必须是System.Enum类型”);
}
数组enumValArray=Enum.GetValues(enumType);
foreach(enumValArray中的变量名称)
{
var y=Enum.Parse(enumType,name.ToString().Trim(),true);
var x=ListHelper.GetListItemString(y);
}
返回null;
}
在上面的方法中,当一个泛型枚举的所有名称/值都读入数组时,我希望遍历它们中的每一个,并调用方法“GetListItemString”,以获得名称的正确间隔版本

但由于“GetListItemString”方法只接受“Enum”类型,因此它没有编译

我不确定在遍历枚举的名称/值时如何传入此方法所需的参数

有人能帮忙吗

更新:我已经尝试使用var x=ListHelper.GetListItemString((Enum)y)


但是当使用EnumToList()调用'EnumToList'方法时,x的值始终为空

由于某种原因,
Parse
的返回类型是
object
,因此只需要从
object
转换到
Enum

var x = ListHelper.GetListItemString((Enum) y);

您可能还想签出(并可能更改)my,它为泛型约束问题提供了一个解决方法。

将y强制转换为“Enum”会使其编译,但如果您调用类似“EnumToList();”的方法,“GetListItemString”不会返回任何内容@克兰蒂:嗯,它必须归还一些东西。你是说它返回一个空字符串吗?如果是这样的话,你真的应该开始调试它。。。你这样做比我们容易得多。逐行调试-事先检查
y
的值,等等。我调试了它。将“y”强制转换为“Enum”的结果值不被“GetListItemString”方法视为“ELegalStatus”类型,并且该大小写未执行,因此为空字符串。@kranthi:不清楚您的意思。在施展之前,您是否检查了
y
的值?如果演员阵容失败,我会期待一个例外。。。(如果你能把你的代码转换成一个简短但完整的例子,我很乐意尝试重现这个问题。)不确定,为什么它昨天不起作用。但今天,当我试图为大家创建一个示例时,它开始工作了。据我所知,我没有做任何更改以使其工作。无论如何,谢谢你的帮助。