2013-02-19 4 views
0

У меня есть вспомогательный метод, который помещает пробелы в имена перечислений, как показано ниже.Невозможно вызвать метод с общим типом перечисления как параметр

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», чтобы получить правильно разнесенную версию имя.

Но поскольку метод GetListItemString принимает только тип «Enum», он не компилируется.

Я не уверен, как передать требуемый параметр для этого метода, итерации по имени/значениям перечисления.

Не могли бы вы помочь?

Обновление: Я уже пробовал использовать var x = ListHelper.GetListItemString ((Enum) y);

Но значение x всегда пусто, когда метод EnumToList вызывается с помощью EnumToList();

ответ

1

Вам просто нужно отливать из object в Enum, так как возвращаемый тип Parse - это object по какой-либо причине.

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

Вы также можете проверить (и, возможно, изменить) мой Unconstrained Melody project, которая обеспечивает обходной путь для общего выпуска ограничений.

+0

Кастинг y в 'Enum' делает его скомпилированным, но 'GetListItemString' ничего не возвращает, если вы вызываете метод, подобный этому 'EnumToList ();' – kranthi

+0

@kranthi: Ну, это должно вернуть * что-то *. Вы говорите, что возвращает пустую строку? Если это так, вы действительно должны начать отлаживать его ... вам гораздо легче сделать это, чем нам. Отлаживайте его по строкам - проверяйте значение 'y' заранее и т. Д. –

+0

Я отлаживал его. Полученное значение отбрасывания 'y' до 'Enum' не рассматривается как тип 'ELegalStatus' методом GetListItemString и этот случай не выполняется, поэтому пустая строка. – kranthi

Смежные вопросы