2013-10-30 23 views
0

我有枚舉:從名稱中獲取Enum。這可能嗎?

public enum Colors { Yellow, Red } 

然後,我有一個字符串:

String enumName = "Colors"; 

是否有可能獲得來自enumName枚舉實例?喜歡的東西:

Enum colors = // get enum with name "Colors". 

謝謝你, 米格爾

+2

是否需要表示枚舉類型的'System.Type'對象? –

+0

您可以通過使用Enum.TryParse來獲取某個枚舉的值之一。你想達到什麼目的? – Kenneth

+0

基本上我有一個字符串枚舉的名稱,例如「顏色」和一個值,例如「紅色」,我需要知道紅色是否是該枚舉的一部分。 –

回答

1

你在找這樣的東西嗎?

using System; 
using System.Linq; 

namespace Stuff 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string enumName = "Colors"; 
      string value = "Red"; 


      var loadedPublicTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetExportedTypes()); 
      var possibleEnums = loadedPublicTypes.Where(x => x.IsEnum && x.Name == enumName); 

      foreach (var e in possibleEnums) 
      { 
       Console.WriteLine("{0} is{1} a member of {2}", value, Enum.GetNames(e).Contains(value) ? "" : " not", e.FullName); 
      } 

     } 


    } 
    public enum Colors 
    { 
     Red, 
     Yellow 
    } 
} 
+0

你也可以使用'Enum.IsDefined(e,value)',這有點容易。 –

0

你可以使用動態類型,按名稱查找一個變量,但你必須有所有你要在其中包括枚舉的一個實例你搜索。

查看以下信息:Getting variable by name in C#

0

您需要枚舉類型的全名(例如System.Drawing.KnownColor, System.DrawingMicrosoft.MediaCenter.UI.Colors, Microsoft.MediaCenter.UI)。

一旦你有了這個,你可以使用反射來創建相應枚舉的實例。

+0

問題不清楚,但用反射任何事情都是可能的。他可以搜索某些程序集(程序集)中的所有類型,以查找名稱*沒有*名稱空間部分爲「」顏色「'的人。 –