C# 我可以参数化泛型类型吗

C# 我可以参数化泛型类型吗,c#,generics,filehelpers,C#,Generics,Filehelpers,我们有几份固定长度记录格式的报告。我们正在使用FileHelper将它们转换为分隔记录格式 由于存在多个报告,我们考虑描述固定和分隔的模型并传递给 FileTransformEngine<TSource, TDestination>(); 至于让它变干,我们能做些类似的事情吗 Transform<TInput, TOutput>() { var engine = new FileTransformEngine<TInput, TOutput>(); e

我们有几份固定长度记录格式的报告。我们正在使用FileHelper将它们转换为分隔记录格式

由于存在多个报告,我们考虑描述固定和分隔的模型并传递给

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(); 
});