gpt4 book ai didi

c# - 将 C# 方法转换为使用引用内部属性的泛型

转载 作者:行者123 更新时间:2023-11-30 12:34:57 26 4
gpt4 key购买 nike

我想转换一个方法来使用泛型。它目前被硬编码为这些类型:

  • 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 作为参数传递,还是有更好的方法?

最佳答案

听起来您需要参数化 DataContext 中的属性名称.一种方法是传入一个带有 DataContext 的函数。并返回您的可枚举(Func<DataContext, IEnumerable<TSource>>),然后您将传递一个像 dc => dc.Document 这样的 lambda。作为那个参数。

另一个可行的选项(但没有类型安全)是将属性名称作为字符串传递,然后使用反射来访问它。

public void ProcessImportObjects<TSource, TDestination>
(Func<DataContext, IEnumerable<TSource>> dcProperty,
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 dcProperty(dc))
{
TDestination doc = Mapper.Map<TSource, TDestination>(d);
processMethod(doc, importSource, resultId);
}
}
}

关于c# - 将 C# 方法转换为使用引用内部属性的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com