c# - 将动态加载类型传递给 SomeFunction<T>

标签 c# generics filehelpers

我正在尝试传递一个动态加载的 dll 的类型(它使用一个接口(interface),但我需要 conectrete implementation of this) to a function and am missing something.

var data = LoadAssemblyFromParamenter(pathToDataDll);
Type dataType = data.GetType().MakeGenericType(data.GetType());
SomeTest<dataType>();

public void SomeTest<T>() 
{
    //do something with T 
}

错误是“找不到类型或命名空间‘dataType’...”

具体类型用于 FileHelpers 对象(使用字段),因此我需要具体实现。

附注这必须是 .net 3.5 ....

详细说明 SomeMethod<T>( IEnumerable<T> items )通话

public static void WriteRecords<T>(IEnumerable<T> records, string fileName )
    where T: ICMSDataDictionary
{
    if (records == null || String.IsNullOrEmpty(fileName))
        return;

    if (records.Any())
    {
        FileHelpers.DelimitedFileEngine<T> engine =
            new FileHelpers.DelimitedFileEngine<T>();
        engine.WriteFile(fileName, records);
    }
}

最佳答案

您不能使用 Method 语法执行此操作,因为为此您会在编译时知道类型。但是,您可以使用反射调用您的方法。

此代码应该可以帮助您开始:

    static void Main(string[] args)
    {
        //Get method Method[T]
        var method = typeof(Program).GetMethod("Method", BindingFlags.NonPublic | BindingFlags.Static);
        //Create generic method with given type (here - int, but you could use any time that you would have at runtime, not only at compile time)
        var genericMethod = method.MakeGenericMethod(typeof(int));
        //Invoke the method
        genericMethod.Invoke(null, null);
    }

    static void Method<T>()
    {
        Console.WriteLine(typeof(T).Name);
    }

对于对象,它是相似的,但是你必须动态地构造对象,使用反射。

关于c# - 将动态加载类型传递给 SomeFunction<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7556264/

相关文章:

c# - 一个类的所有异常的异常处理程序

java - SpringBoot 使用 MongoDB 实现通用 DAO

java - 通用方法接受不同的数据类型列表

c# - FileHelpers - 如何读入 ® 字符?

c# - 在 WPF/C# 中通知可观察集合中的项目更改

c# - 将多个文件流合并到一个文件中?

.net - 如何解决 Generic.IList<T>.this[] 和 IList.this[] 之间的调用歧义?

asp.net - Filehelpers Excel 到 Oracle db

c# - 如何使用 FileHelpers 库将大型 SQL Server 表导出到 CSV 文件中?

c# - 从字符串中检索类型