如何触发递归更改T类型的泛型类方法?

美索卡林

我创建了一个通用类,将某些数据解析为一个类的另一个实例(MyClass1)。由于MyClass1只有内置的C#类型,因此我的GenericMethod工作正常。MyClass1具有另一个MyClass2属性并且我仍然想调用GenericMethod我的数据来分析数据时,问题开始变得越来越严重

我无法在其范围内触发通用类方法,因为我需要更改的类型T有什么办法解决这个问题?

public class MyClass1 
{
    public int MyIntProperty { get; set; }
    public string MyStringProperty { get; set; }

    public MyClass2 MyClass2Property { get; set; }
}

public class MyClass2 
{
    public int MyOtherIntProperty { get; set; }
    public string MyOtherStringProperty { get; set; }
    public bool MyOtherBoolProperty { get; set; }
}

public class MyGenericClass<T> where T : class
{
    public static T MyGenericMethod()
    {
        T o = (T)Activator.CreateInstance(typeof(T));
        PropertyInfo[] pi = typeof(T).GetProperties();

        for(int i = 0; i < pi.Count(); i++) 
        {
            if(pi[i].Name == "MyClass2Property") 
            {
                //How to proceed ?
                MyGenericClass<???>.MyGenericMethod(); 
            }
            else 
            {
                pi[i].SetValue(o, Convert.ChangeType(someValue, pi[i].PropertyType), null);
            }
        }
    }
}        

public static void Main(string[] args) 
{
    MyClass1 mc1 = MyGenericClass<MyClass1>.MyGenericMethod();
    //Do something with mc1
}
马克B42

你可以看一下这篇文章

也许尝试这样的事情

public static class MyGenericClass<T> where T : class
{
    public static T MyGenericMethod()
    {
    T o = (T)Activator.CreateInstance(typeof(T));
    PropertyInfo[] pi = typeof(T).GetProperties();

    for(int i = 0; i < pi.Count(); i++) 
    {
        if(pi[i].Name == "MyClass2Property") 
        {
            //How to proceed ?
            Type t = typeof (MyGenericClass<>);
            Type genericType = t.MakeGenericType(new System.Type[] { pi[i].PropertyType });
            var c = Activator.CreateInstance(genericType);
            dynamic mgm = Convert.ChangeType(c, genericType);
            mgm.MyGenericMethod(); 
        }
        else 
        {
            pi[i].SetValue(o, Convert.ChangeType(someValue, pi[i].PropertyType), null);
        }
    }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

如何模拟接受类类型的泛型方法?

来自分类Dev

如何将复杂的泛型方法应用于通配符泛型类型的类?

来自分类Dev

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

来自分类Dev

如何在非泛型静态类的多个方法中使用相同的泛型类型

来自分类Dev

泛型方法和泛型类中的类型推断

来自分类Dev

如何为泛型类指定泛型集合类型?

来自分类Dev

没有类类型的泛型方法?

来自分类Dev

如何使用类型的辅助类泛型

来自分类Dev

如何返回泛型类型的类

来自分类Dev

如何定义不是类的泛型类型?

来自分类Dev

泛型方法类型不能用作泛型类的泛型类型

来自分类Dev

如何创建泛型方法以返回泛型类型

来自分类Dev

StarUML类图:如何为类手动添加泛型(模板类型T)

来自分类Dev

如何使用主类中的方法从嵌套类中返回泛型类型

来自分类Dev

Java泛型:如何为泛型类型化的类指定类类型?

来自分类Dev

Java泛型:如何为泛型类型化的类指定类类型?

来自分类Dev

如何获得 T 泛型的类型?

来自分类Dev

如何从泛型方法<T>() 返回泛型 List<T>

来自分类Dev

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

来自分类Dev

从泛型类型类确定方法参数类型

来自分类Dev

如何从方法返回泛型类?

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

尽管返回类型已经定义,但泛型方法定义包含<T扩展类>。

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

类中具有2个泛型类型的方法,其中1个泛型类型

来自分类Dev

类中具有2个泛型类型的方法,其中1个泛型类型

来自分类Dev

泛型类型参数C#-如何泛型类返回类型

Related 相关文章

  1. 1

    如何使用泛型返回泛型类的类类型?

  2. 2

    如何模拟接受类类型的泛型方法?

  3. 3

    如何将复杂的泛型方法应用于通配符泛型类型的类?

  4. 4

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

  5. 5

    如何在非泛型静态类的多个方法中使用相同的泛型类型

  6. 6

    泛型方法和泛型类中的类型推断

  7. 7

    如何为泛型类指定泛型集合类型?

  8. 8

    没有类类型的泛型方法?

  9. 9

    如何使用类型的辅助类泛型

  10. 10

    如何返回泛型类型的类

  11. 11

    如何定义不是类的泛型类型?

  12. 12

    泛型方法类型不能用作泛型类的泛型类型

  13. 13

    如何创建泛型方法以返回泛型类型

  14. 14

    StarUML类图:如何为类手动添加泛型(模板类型T)

  15. 15

    如何使用主类中的方法从嵌套类中返回泛型类型

  16. 16

    Java泛型:如何为泛型类型化的类指定类类型?

  17. 17

    Java泛型:如何为泛型类型化的类指定类类型?

  18. 18

    如何获得 T 泛型的类型?

  19. 19

    如何从泛型方法<T>() 返回泛型 List<T>

  20. 20

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

  21. 21

    从泛型类型类确定方法参数类型

  22. 22

    如何从方法返回泛型类?

  23. 23

    如何在类中使用扩展的泛型类型的类型?

  24. 24

    尽管返回类型已经定义,但泛型方法定义包含<T扩展类>。

  25. 25

    如何使用C#泛型将类的对象转换为T类型的对象?

  26. 26

    如何使用C#泛型将类的对象转换为T类型的对象?

  27. 27

    类中具有2个泛型类型的方法,其中1个泛型类型

  28. 28

    类中具有2个泛型类型的方法,其中1个泛型类型

  29. 29

    泛型类型参数C#-如何泛型类返回类型

热门标签

归档