现在,我有一个这样的枚举:
public enum ReferenceType
{
Language = 1,
Period = 2,
Genre = 3
}
Language,Period和Genre都是映射回数据库中表的实体类。我还有模型类,它们用实体类映射几乎1到1,然后我在视图中显示它。
我也有这样的服务方法:
List<Model> Get<Model, Entity>()
where Model : BaseModel
where Entity : BaseEntity;
我可以像Service.Get<LanguageModel, Language>()
一样调用它,它将从我的数据库中返回表格语言的每一行,并自动将它们转换为语言模型,然后我将在我的视图中显示。
我想围绕Get()
方法创建一个包装器方法,您只需要传入一个整数,它将调用我的Get()
方法自动填充实体和模型类类型。唯一的问题是我很难绕过这背后的实际实现。
伪代码将遵循:
WrapperGet((int)ReferenceType.Genre)
Genre
)和模型类型(GenreModel
)Get()
方法,因此它为Get<GenreModel, Genre>()
我如何在C#中实现这一点?
答案 0 :(得分:2)
我想不出一个完整的通用方法,我认为最简单的方法如下:
List<Model> WrapperGet(int type)
{
switch (type)
{
case 1: return Get<LanguageModel, Language>();
....
}
return null;
}
答案 1 :(得分:1)
如果你想要强类型的结果,你将不得不放弃传递int
或枚举的想法,并切换到直接调用Get
或制作这样的方法:
List<LanguageModel> GetLanguages() { return Get<LanguageModel, Language>(); }
如果弱类型适合你,那么我会选择Saeed的解决方案,但类型需要稍微改变才能工作。 Model
在您的示例中是通用类型,因此可能他将List<BaseModel>
视为返回类型。但是List<LanguageModel>
不是List<BaseModel>
!您可以通过返回IEnumerable<BaseModel>
或更改Get
以返回List<BaseModel>
来解决这个问题,或者之后使用return new List<BaseModel>(Get<...