首页 / C# / c# – 从枚举类型创建类的最简洁方法?
c# – 从枚举类型创建类的最简洁方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 从枚举类型创建类的最简洁方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2063字,纯文字阅读大概需要3分钟。
内容图文
![c# – 从枚举类型创建类的最简洁方法?](/upload/InfoBanner/zyjiaocheng/811/dd25fb0adebe4bfab3810824b45ad876.jpg)
我有以下枚举和类:
public enum MyEnum
{
MyType1,
MyType2
}
public abstract class MyBaseClass
{
public abstract MyEnum GetMyType();
}
public class MySubClass : MyBaseClass
{
public override MyEnum GetMyType()
{
return MyEnum.MyType1;
}
}
我想基于GetMyType()创建一个MySubClass实例,但是不需要将MySubClass“注册”到某种处理程序(或者是这样的方式?).我知道这可能很容易通过反射(循环通过汇编从MyBaseClass继承的类并检查它们的MyType),但这是要走的路吗?
现在我正在做一些很长的事情:
public MyBaseClass CreateMyClass(MyEnum myEnum)
{
if(myEnum == MyEnum.MyType1)
{
return new MySubClass();
}
else if(myEnum == MyEnum.MyType2)
{
return new MyOtherSubClass();
}
}
这最终会导致我忘记手动添加新类.它将在测试中被捕获,但我根本不需要添加类,因为已经提供了所需的所有信息.
对所有关于最佳方法的建议持开放态度.
解决方法:
您可以创建自定义属性以标识所需的枚举类.
public class MyCustomAttribute : Attribute
{
public MyEnum EnumType { get; set; }
}
然后是枚举和类;
public enum MyEnum
{
MyType1,
MyType2
}
public class MyBaseClass
{
}
[MyCustomAttribute(EnumType = MyEnum.MyType1)]
public class MySubClass : MyBaseClass
{
}
[MyCustomAttribute(EnumType = MyEnum.MyType2)]
public class MyOtherClass : MyBaseClass
{
}
您可以使用Reflection来确定与枚举相关的类.
private static Dictionary<MyEnum, Type> _myEnumDictionary = new Dictionary<MyEnum, Type>();
public MyBaseClass GetEnumClass(MyEnum enumType)
{
if (!_myEnumDictionary.ContainsKey(enumType))
{
var enumClass = typeof(MySubClass).Assembly
.GetTypes()
.FirstOrDefault(x => x.GetCustomAttributes<MyCustomAttribute>()
.Any(k => k.EnumType == enumType));
if (enumClass == null)
{
throw new Exception("There is no declared class with the enumType" + enumType);
}
_myEnumDictionary.Add(enumType, enumClass);
}
return (MyBaseClass)Activator.CreateInstance(_myEnumDictionary[enumType]);
}
最后,你可以得到相关类的实例;
var mySubClass = GetEnumClass(MyEnum.MyType1);
var myOtherClass = GetEnumClass(MyEnum.MyType2);
//There is no lookup here. It will get the Type from Dictionary directly.
var mySubClass2 = GetEnumClass(MyEnum.MyType1);
此外,您可以使用静态字典< MyEnum,Type>字典集合,以防止每次查找.
内容总结
以上是互联网集市为您收集整理的c# – 从枚举类型创建类的最简洁方法?全部内容,希望文章能够帮你解决c# – 从枚举类型创建类的最简洁方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。