C# 我可以参数化泛型类型吗
我们有几份固定长度记录格式的报告。我们正在使用FileHelper将它们转换为分隔记录格式 由于存在多个报告,我们考虑描述固定和分隔的模型并传递给C# 我可以参数化泛型类型吗,c#,generics,filehelpers,C#,Generics,Filehelpers,我们有几份固定长度记录格式的报告。我们正在使用FileHelper将它们转换为分隔记录格式 由于存在多个报告,我们考虑描述固定和分隔的模型并传递给 FileTransformEngine<TSource, TDestination>(); 至于让它变干,我们能做些类似的事情吗 Transform<TInput, TOutput>() { var engine = new FileTransformEngine<TInput, TOutput>(); e
FileTransformEngine<TSource, TDestination>();
至于让它变干,我们能做些类似的事情吗
Transform<TInput, TOutput>()
{
var engine = new FileTransformEngine<TInput, TOutput>();
engine.TransformFileFast(...);
}
我是C和泛型新手,不知道从哪里开始
任何人都可以给我一些指导,无论这是可能的,因为所有的模型都已经创建了,我认为它们在编译时是可用的 filehelpers文档显示了如何和-因此在您自己的FileTransformEngine中包装对这两个的调用应该非常容易 那你就用
var engine = new FileTransformEngine<MyRecord>();
engine.TransformFileFast("from/input.txt","to/output.csv");
如果您需要输入和输出的不同类型,可以让类接受两种类型:输入和输出,以及用于将一种转换为另一种的谓词
public class FileTransformEngine<TInput, TOutput>
{
public void TransformFileFast(string inputFile, string outputFile,
Func<TInput,TOutput> transformer)
{
var readEngine = new FixedFileEngine<TInput>();
TInput[] records = readEngine.ReadFile(inputFile);
IEnumerable<TOutput> outputRecords = records.Select(transformer);
var writeEngine = new FileHelperEngine<TOutput>();
writeEngine.WriteFile(outputFile,outputRecords );
}
}
这将与您的两种类型一起调用
var engine = new FileTransformEngine<MyInputRecord, MyOutputRecord>();
engine.TransformFileFast("from/input.txt","to/output.csv", input => {
//transform input to output.
return new MyOutputRecord();
});
你的问题不清楚。你到底想要什么样的指导?不使用反思是否可以实现?谢谢你的帮助。我可以用你的例子来完成。
public class FileTransformEngine<TInput, TOutput>
{
public void TransformFileFast(string inputFile, string outputFile,
Func<TInput,TOutput> transformer)
{
var readEngine = new FixedFileEngine<TInput>();
TInput[] records = readEngine.ReadFile(inputFile);
IEnumerable<TOutput> outputRecords = records.Select(transformer);
var writeEngine = new FileHelperEngine<TOutput>();
writeEngine.WriteFile(outputFile,outputRecords );
}
}
var engine = new FileTransformEngine<MyInputRecord, MyOutputRecord>();
engine.TransformFileFast("from/input.txt","to/output.csv", input => {
//transform input to output.
return new MyOutputRecord();
});