如何在变量中存储将用于代替泛型类的类的名称?

时间:2015-02-03 20:10:39

标签: c# generics

尝试重新分解代码,我创建了一个基类,我已经放置了所有常用功能。我坚持使用这个我要转换为方法的代表。

 Func<LogImportTestArgs, IList<TranslationTask>> 
 getParserWithMocks = (args) =>
 {
         return TestParserWithMocks<MyGenericClass>(
                parserConstName: args.ParserConstName,
                logFileName: args.LogFileName,
                srcLocale: args.SrcLocale,
                tgtLocale: args.TgtLocale,
                tlType: args.TranslationType,
                ttype: args.TTtype,
                logMappingID: args.LogMappingID
      );
   };

除了我不知道如何存储在变量中的泛型类之外,一切都很简单。我试图将类的名称存储为字符串,但是当我用字符串替换MyGenericClass时,我收到错误。

protected IList<TranslationTask> getParserWithMocks(LogImportTestArgs args)
{
         return TestParserWithMocks<MyGenericClass>(
                parserConstName: args.ParserConstName,
                logFileName: args.LogFileName,
                srcLocale: args.SrcLocale,
                tgtLocale: args.TgtLocale,
                tlType: args.TranslationType,
                ttype: args.TTtype,
                logMappingID: args.LogMappingID
      );
   };

有没有办法在变量中存储泛型类的值?否则我将不得不在每次测试中复制/粘贴相同的方法。我希望有一个可以修改此方法的中心位置。

谢谢。

2 个答案:

答案 0 :(得分:2)

如果你想在那里参数化MyGenericClass,你需要使函数通用:

protected IList<TranslationTask> GetParserWithMocks<T> (LogImportTestArgs args)
{
    return TestParserWithMocks<T>(
        parserConstName: args.ParserConstName,
        logFileName: args.LogFileName,
        srcLocale: args.SrcLocale,
        tgtLocale: args.TgtLocale,
        tlType: args.TranslationType,
        ttype: args.TTtype,
        logMappingID: args.LogMappingID
    );
};

然后,当您调用该函数时,您需要传入泛型类型:

IList<TranslationTask> tasks = GetParserWithMocks<MyGenericClass>(args);

答案 1 :(得分:1)

不确定我完全理解,但似乎您希望该方法是通用的:

protected IList<TranslationTask> getParserWithMocks<T>(LogImportTestArgs args)
{
     return TestParserWithMocks<T>(
            parserConstName: args.ParserConstName,
            logFileName: args.LogFileName,
            srcLocale: args.SrcLocale,
            tgtLocale: args.TgtLocale,
            tlType: args.TranslationType,
            ttype: args.TTtype,
            logMappingID: args.LogMappingID
      );
   };