【发布时间】:2011-09-19 03:49:14
【问题描述】:
我想将一个方法转换为使用泛型。 它目前被硬编码为以下类型:
-
DataContext.Document在数据上下文的部分类中并继承自object -
DataContext.Documents也在这个部分类中并继承自Linq.Table<Document> -
Import.Document继承自自定义类ImportObject
原方法:
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 作为参数传入还是有更好的方法?
【问题讨论】:
标签: c# linq generics c#-3.0 foreach