当前位置: 代码迷 >> C# >> GetType后续.上一个举的例证有局限性,还是说原题吧
  详细解决方案

GetType后续.上一个举的例证有局限性,还是说原题吧

热度:106   发布时间:2016-05-05 05:08:03.0
GetType后续..上一个举的例子有局限性,还是说原题吧.
泛型函数f<T>(T dt).调用前只知道参数dt,是object类型的。

除了用if语句判断后多次调用,或者类似的方法。能不能一句搞定,类似f<typeof(dt)>(dt).这个type就是dt的类型。

因为函数中有需要根据T的属性名称取值处理,所以不能直接用object。

------解决思路----------------------
引用:
引用:那就用dynamic啊。

在家没有环境,dynamic能用作泛型的输入?  f<dynamic>(dt)?

可以,但是没这样输入就没什么意义了。
你可以看看下面的用法,不太清楚你的具体需求:

        static void Main(string[] args)
        {
            Student stu = new Student();
            Say(stu);//I'm student.

            Teacher tea = new Teacher();
            Say(tea);//I'm teacher.

            Say<Student>();//I'm student.
            Say<Teacher>();//I'm teacher.
        }

        static void Say(dynamic obj)
        {
            obj.Say();
        }

        static void Say<T>()
        {
            dynamic obj = Activator.CreateInstance(typeof(T));
            obj.Say();
        }

        struct Student
        {
            public void Say()
            {
                Console.WriteLine("I'm student.");
            }
        }

        class Teacher
        {
            public void Say()
            {
                Console.WriteLine("I'm teacher.");
            }
        }

------解决思路----------------------
反射
------解决思路----------------------
引用:
引用:反射

不好用啊,反射用来新建一个实例可以,但是要得到类型 再作为参数传入泛型函数就没办法。

泛型其实是设计时概念,任何把泛型用在运行时的设计都是错误的。
------解决思路----------------------
可能是楼主你的问题表述有问题,你是不是想问这个给定的泛型方法能否通过反射去掉用啊。给你一段示例代码,也许是你想要的:
typeof(class).GetMethoc("f").MakeGenericMethod(dt.GetType()).Invoke(null,new Ojbect[]{dt});