【发布时间】:2013-07-24 13:44:16
【问题描述】:
我有一个我想与 dto 关联的枚举:
public enum DtoSelection
{
dto1,
dto2,
dto3,
}
这个枚举中有 108 个和值。
每个 dto 都有一个 dto 对象:
public class dto1 : AbstractDto
{
public int Id { get; set; }
//some stuff specific to this dto
}
我正在尝试创建一个方法(最终是一个服务),它将返回一个新的 dto 对象,该对象的类型与相关 dto 相关联:
private AbstractDto(int id)
{
if (id == DtoSelection.Dto1.ToInt()) //extension method I wrote for enums
return new Dto1();
if (id == DtoSelection.Dto2.ToInt())
return new Dto2();
}
显然我不想这样做 108 次。无论出于何种原因,我的大脑只是缺少一些明显的东西。处理此问题的最佳方法是什么。
【问题讨论】:
-
我很好奇这是否可能
-
首先您可以使用
switch改进您的if列表。你想使用反射吗? -
一个枚举中有 108 个不同的 dto 对象背后的原因是什么?为什么不使用数组?
-
缺少一些脆弱的反射,您可以创建一个
Dictionary<DtoSelection, Func<AbstractDto>>,您可以在启动时使用工厂方法填充一次(例如在私有静态构造函数中)。然后就像myDict[(DtoSelection)id]()一样称呼它。 -
@ChrisSinclair 如何在不“执行 108 次”的情况下填充这本词典?
标签: c# abstraction