如何在C#中对动态类型调用泛型方法

BlueTrin

我有以下代码:

public static List<object[]> Serialise2D_Rec<T>(IEnumerable<T> data)
{
    int numElts = 0;
    foreach (var item in data)
        numElts++;

    Type t = typeof(T); // Get type pointer
    PropertyInfo[] propList = t.GetProperties();


    List<object[]> toret = new List<object[]>();

    for (long propID = 0; propID < propList.Count(); ++propID)
    {
        var proptype = propList[propID].PropertyType;
        if (proptype.IsPrimitive || proptype == typeof(Decimal) || proptype == typeof(String))
        {
            toret.Add(new object[numElts + 1]);
            toret[toret.Count - 1][0] = propList[propID].Name;
            int row = 1;
            foreach (T item in data)
            {
                toret[toret.Count - 1][row] = propList[propID].GetValue(item, null);
                row++;
            }
        }
        else
        {
            var lst = (IList)Activator.CreateInstance((typeof(List<>).MakeGenericType(proptype)));
            foreach (T item in data)
            {
                lst.Add(propList[propID].GetValue(item, null));
            }
            List<object[]> serialisedProp = Serialise2D_Rec(lst);

        }
    }
    return toret;

}

但是,此行将失败并显示以下内容:

List<object[]> serialisedProp = Serialise2D_Rec(lst);

与错误:

****: error CS0411: The type arguments for method '****.****.Serialise2D_Rec<T>(System.Collections.Generic.IEnumerable<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我如何在递归中指定类型,似乎动态泛型类型的语法不是那么简单。

JDB仍然记得莫妮卡

由于您的类型是动态的,因此直到运行时您才知道泛型参数的类型。因此,您还必须将函数视为动态函数,因为直到运行时您才知道函数的通用签名的“类型”。

您必须使用反射来动态调用泛型函数。请参阅如何使用反射调用泛型方法?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中调用泛型重载方法

来自分类Dev

在C#中调用泛型方法

来自分类Dev

用动态类型c#调用泛型类的静态方法

来自分类Dev

如何在C#中创建泛型方法重载?

来自分类Dev

如何在TypeScript泛型中动态指定类型?

来自分类Dev

如何在C#中使用派生类型重写泛型方法

来自分类Dev

如何从泛型类型调用重载方法

来自分类Dev

如何在C#中收集具有泛型类型的静态类的所有“实例”?

来自分类Dev

如何在C#中对具有抽象内部类型的泛型进行模式匹配?

来自分类Dev

C#在方法调用中扩展泛型类

来自分类Dev

C#在方法调用中扩展泛型类

来自分类Dev

如何在泛型方法中引用类型参数的值

来自分类Dev

C#泛型并使用类型化方法中的非泛型版本

来自分类Dev

声明C#泛型类型方法

来自分类Dev

如何在泛型方法中获取泛型类型的类实例

来自分类Dev

从调用的泛型方法动态设置类型或结果?

来自分类Dev

C#中泛型类型的缺点

来自分类Dev

C#中的泛型类型

来自分类Dev

在C#中循环泛型类型

来自分类Dev

C#中的泛型类型转换

来自分类Dev

C#中的双重泛型类型

来自分类Dev

如何在C#中从泛型创建对象

来自分类Dev

如何在C#中从泛型创建对象

来自分类Dev

如何在C#中遍历泛型类的属性?

来自分类Dev

如何在C#中将受约束的泛型类型的Action委托存储在类型安全的集合中?

来自分类Dev

如何在C#中将受约束的泛型类型的Action委托存储在类型安全的集合中?

来自分类Dev

如何在具有多个约束的C#中实现泛型方法

来自分类Dev

C#如何在方法中获取泛型类引用

来自分类Dev

在Java中,如何在泛型类型的实例上调用getClass时避免原始类型?

Related 相关文章

热门标签

归档