无法使用通用枚举类型作为参数调用方法

时间:2013-02-19 16:05:30

标签: c#-4.0 generics enums

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

 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;

        }

在上面的方法中,当通用枚举的所有名称/值都被读入数组时,我想迭代它们中的每一个并调用方法'GetListItemString'来获得名称的正确间隔版本。 / p>

但由于'GetListItemString'方法只接受'Enum'类型,因此它不会编译。

我不知道如何在迭代枚举的名称/值时传递此方法的必需参数。

有人可以帮忙吗?

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

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

1 个答案:

答案 0 :(得分:1)

您只需要从object投射到Enum,因为某些原因Parse的返回类型为object

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

您可能还想查看(并可能更改)我的Unconstrained Melody project,它为通用约束问题提供了解决方法。