日期:2014-05-20  浏览次数:20700 次

如何传递类型参数
我有一个泛型类Operation<T> where T:new()
有一个静态方法static string Add(T obj)
我调用时需要传递给T一个类型参数,比如Class1,因为传递的类型参数不确定,想根据传入的类名字符串生成类型传递给T,该怎么搞?Type.GetType("类名字符串")不行。

------解决方案--------------------
T代表某一个指定的类型,比如T可以是int,string或者是自定义类型等等
new 约束的意思是泛型对象必须能够实例化并具有缺省构造函数
------解决方案--------------------
C# code

using System;
using System.Reflection;

namespace ReflectTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var obj = GetResult("System.Int32", 1, 2);
            Console.WriteLine(obj);
            Console.Read();
        }

        static object GetResult(string typeString, params object[] args)
        {
            Type t = Type.GetType(string.Format("ReflectTest.Operation`1[{0}]", typeString));
            MethodInfo mi = t.GetMethod("Add", BindingFlags.Static|BindingFlags.Public);
            return mi.Invoke(null, args);
        }
    }

    public class Operation<T> where T : new()
    {
        public static string Add(T obj1, T obj2)
        {
            return obj1.ToString() + "+" + obj2.ToString();
        }
    }
}

------解决方案--------------------

没懂什么意思。

如果传入不同的类型,那就要用到循环了 来判断类型后 返回字符串

类型就得穷举了吧?
------解决方案--------------------
1,个人建议你用枚举,(枚举?若不知道你可以上MSDN查一下)
把T类型设成枚举型,然后在里面填入你想要的可能值,比如在C#中可以这么写:
enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; 

这里的Days和Months就是你的T,然后你调用的时候就可以匹配了,只要值在你的枚举里面就行。
2,实在不行用委托,把这个要传值的方法用委托来实现(不太明白,上MSDN),这个方法基本没失手过。