处理一个项目,在这个项目中,他们有很多枚举,并且有多个dll中的大量重复对象。 一团糟但让我们继续前进。
我有这个扩展方法,在将枚举转换为Enum时,在enum中具有相同位置 但如果名称相同但枚举的位置不同,则会失败
如何改进我的代码,以便根据名称匹配获得正确的枚举,无论枚举位于何处
由于
[TestClass]
public class UnitTest1
{
[TestMethod]
public void ToEnum_convert_returnsCorrectEnum()
{
const CategoryA categoryALawyer = CategoryA.Lawyer;
var result = categoryALawyer.ToEnum<CategoryB>();
Assert.AreEqual(CategoryA.Lawyer.ToString(),result.ToString());
}
}
namespace Utilities
{
public enum CategoryA
{
Lawyer,
Developer,
Manager,
Employee,
Director,
}
public enum CategoryB
{
Director,
Manager,
Developer,
Employee,
Lawyer
}
public static class EnumExtensions
{
public static T ToEnum<T>(this Enum value)
{
return (T)Enum.ToObject(typeof(T), value);
}
}
}
我无法控制的一些dll因此无法更改枚举顺序
答案 0 :(得分:7)
T val;
if (Enum.TryParse<T>(value.ToString(), out val))
return val;
else return default(T);
编辑:将“Parse”更改为正确的“TryParse”。此外,TryParse方法有一个重载,如果你想要它使它不区分大小写:
Enum.TryParse<T>(value.ToString(), true, out val)