日期:2014-05-17  浏览次数:21073 次

GetType后续..上一个举的例子有局限性,还是说原题吧.
泛型函数f<T>(T dt).调用前只知道参数dt,是object类型的。

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

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

------最佳解决方案--------------------
可能是楼主你的问题表述有问题,你是不是想问这个给定的泛型方法能否通过反射去掉用啊。给你一段示例代码,也许是你想要的:
typeof(class).GetMethoc("f").MakeGenericMethod(dt.GetType()).Invoke(null,new Ojbect[]{dt});

------其他解决方案--------------------
引用:
引用:那就用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.");
            }
        }

------其他解决方案--------------------
反射
------其他解决方案--------------------
引用:
引用:反射

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