假设我有这个Enum:
namespace BusinessRule
{
public enum SalaryCriteria : int
{
[EnumDisplayName(DisplayName = "Per Month")]
Per_Month = 1,
[EnumDisplayName(DisplayName = "Per Year")]
Per_Year = 2,
[EnumDisplayName(DisplayName = "Per Week")]
Per_Week = 3
}
}我把它的名字放在一个字符串变量中,如下所示:
string EnumAtt = "SalaryCriteria";我试图检查这个Enum是否由这个名称定义,如果定义了,我想得到它的实例。我尝试过这样做,但是type正在返回null
string EnumAtt = "SalaryCriteria";
Type myType1 = Type.GetType(EnumAtt);我也尝试过这样做:
string EnumAtt = "BusinessRule.SalaryCriteria";
Type myType1 = Type.GetType(EnumAtt);知道我怎么能做到这一点吗。
发布于 2014-08-20 12:34:28
要在当前AppDomain中的所有加载程序集中搜索给定的枚举--而不具有完全限定的程序集名称--您可以这样做:
public static Type GetEnumType(string enumName)
{
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var type = assembly.GetType(enumName);
if (type == null)
continue;
if (type.IsEnum)
return type;
}
return null;
}例如(选择不在程序集中的semi-random enum ):
var type1 = Type.GetType("System.Xml.Linq.LoadOptions") // Returns null.
var type2 = GetEnumType("System.Xml.Linq.LoadOptions") // Returns successfully.您的名称仍然应该包括名称空间。
发布于 2014-08-20 12:59:03
一个LINQ启发的答案:
public static Type GetEnumType(string name)
{
return
(from assembly in AppDomain.CurrentDomain.GetAssemblies()
let type = assembly.GetType(name)
where type != null
&& type.IsEnum
select type).FirstOrDefault();
}原因是您需要遍历所有已加载的程序集,而不仅仅是当前程序集。
发布于 2014-08-20 12:18:05
这对我很有用。
Type myType1 = Type.GetType("BusinessRule.SalaryCriteria");

我尝试过没有"EnumDisplayName“属性。
https://stackoverflow.com/questions/25404237
复制相似问题