【发布时间】:2015-08-16 16:18:50
【问题描述】:
我有一个项目,其中有一些实现抽象类的程序集。
每个程序集都有一个名为 ResultEnum 的公共枚举。 这个 ResultEnum 的值以 int 形式存储在数据库中。
我有另一个显示一些信息的 web 项目,我希望它也显示这个 int 的字符串表示形式 - ResultEnum 中相应值的名称。
我想要做的是,使用 MEF,加载所有相关程序集(这里没问题),使用反射搜索这个枚举(这里也没有问题),然后以某种方式存储枚举,并将其缓存在为了避免所有这些过程,因为我的 db 表中有数千条记录,因此下次我想将数据库中的 int 转换为字符串表示形式(如有必要,还可以反过来)。
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(path));
_container = new CompositionContainer(catalog);
try
{
_container.ComposeParts(this);
}
catch (CompositionException compositionException)
{
Console.WriteLine(compositionException.ToString());
}
foreach (var task in myTasks)
{
TaskAbstract instance = (TaskAbstract)task.CreateExport().Value;
MemberInfo[] infos = instance.GetType().GetMembers(BindingFlags.Public | BindingFlags.Static);
foreach (MemberInfo member in infos.Where(x => x.Name.Equals("ResultEnum")))
{
Console.WriteLine(member);
}
}
你建议下一步应该怎么做? 我应该如何存储/缓存它?
谢谢
【问题讨论】:
-
我想到了一个从 int 到 string 的字典,不是吗?
-
我同意,但问题是我如何迭代枚举数的值和名称。而且,有没有比字典更好的解决方案
-
您是否经常需要执行这些类型的操作?如果是这样,您可能需要考虑使用类似子类枚举或类似技术的东西。我在tyreejackson.com/subclassable-enums 写过关于可分类枚举的文章。例如,我使用 StringIntegerEnum 子类型来处理每个枚举的双重基础值之间的映射。
-
@TyreeJackson 这个解决方案似乎很有趣,我确实需要一个“抽象”枚举器。我会再次阅读并考虑实施此更改,谢谢:)
-
@Alonzzo2 酷。然后我会发布一个关于 Subclassable 枚举的答案。
标签: c# reflection system.reflection