ジェネリックを使用するメソッドを変換したいと思います。データコンテキストの部分クラスで内部でプロパティを参照するジェネリックを使用するようにC#メソッドを変換する
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は、IEnumerable<TSource>
のDataContextのプロパティを参照する必要があります。 これは、DataContextをパラメータとして渡す必要があることを意味しますか、それとも良い方法ですか?