转换C#方法以使用引用内部属性的泛型
发布时间:2020-12-15 17:17:51 所属栏目:百科 来源:网络整理
导读:我想转换一个方法来使用泛型. 它目前硬编码为以下类型: DataContext.Document在数据上下文的部分类中并从对象继承 DataContext.Documents也在这个部分类中继承自Linq.Table Document Import.Document继承自定义类ImportObject 原始方法: public void Proce
|
我想转换一个方法来使用泛型.
它目前硬编码为以下类型: > DataContext.Document在数据上下文的部分类中并从对象继承 原始方法: public void ProcessDocuments(Delegate method,params object[] args)
{
using (DataContext dc = new DataContext())
{
dc.ObjectTrackingEnabled = false;
// Map from DataContext object to ImportObject
Mapper.CreateMap<Document,Import.Document>();
// Loop through DataContext objects
foreach (Document d in dc.Documents)
{
Import.Document doc = Mapper.Map<Document,Import.Document>(d);
args[0] = doc;
method.DynamicInvoke(args);
}
}
}
尝试方法: public void ProcessImportObjects<TSource,TDestination>
(Action<TDestination,ImportDataSource,int> processMethod,ImportDataSource importSource,int resultId)
{
using (DataContext dc = new DataContext())
{
dc.ObjectTrackingEnabled = false;
Mapper.CreateMap<TSource,TDestination>();
foreach (TSource d in dc.Documents) // PROBLEM: Hard-coded reference to property on DataContext
{
TDestination doc = Mapper.Map<TSource,TDestination>(d);
processMethod(doc,importSource,resultId);
}
}
}
(这里,TDestination应该是ImportObject类型,但我不知道如何表达它.) 如注释中所示,foreach需要引用DataContext上的属性,该属性是IEnumerable< TSource>. 解决方法
听起来你需要在DataContext中参数化属性名称.一种方法是传入一个函数,它接受一个DataContext并返回你的枚举(一个Func< DataContext,IEnumerable< TSource>>),然后你传入一个像dc =>这样的lambda. dc.Document作为该参数.
另一个可行(但没有类型安全性)的选项是将属性的名称作为字符串传递,然后使用Reflection来访问它. public void ProcessImportObjects<TSource,TDestination>
(Func<DataContext,IEnumerable<TSource>> dcProperty,Action<TDestination,TDestination>();
foreach (TSource d in dcProperty(dc))
{
TDestination doc = Mapper.Map<TSource,resultId);
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
