none
请教怎么获得类型形参的具体值? RRS feed

  • 问题

  • 如题如果我有这样一个函数

    public T Load<T>(string arg){}
    
    
    
    

    希望获得T的值以便进行不同的处理,应该怎么写呢
    此外如果应该怎么将返回对象类型转换为T?隐式显式转换都说不行。

    看了一楼这位仁兄的回答,感觉可能是自己问题没问清楚。

    我希望能在LOAD这个函数中根据T的不同类型进行不同的处理来返回值,arg这个参数不是T类型的,好吧,类似XNA里面的CONTENT.LOAD<T>方法,

    2011年7月13日 8:23

答案

  • dear

    在泛型里面使用条件判断就失去使用泛型的意义会破坏味道,可以在优化,把MyClass继承同一个界面,你就可以少掉判断式。

    http://www.dotblogs.com.tw/yc421206/archive/2011/05/19/25543.aspx

    还有几个简单的例子你可参考看看,说不定对你更有帮助

    http://www.dotblogs.com.tw/yc421206/archive/2011/05/20/25595.aspx
    http://www.dotblogs.com.tw/yc421206/archive/2011/05/20/25615.aspx

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已标记为答案 路过君 2011年7月18日 2:54
    2011年7月16日 8:38

全部回复

  • hi~

    請參考我為你實作的範例

    執行結果:

     

    程式碼:

    namespace CA_GetTypeofMethod
    {
      class Program
      {
        static void Main(string[] args)
        {
          MyClass mc = new MyClass();
          
          Type tt = typeof(MyClass);
          Console.WriteLine(tt); 
          Console.WriteLine();
    
          //取得現在 GetLoad 中的 T 為何種型別,下方為 Int32
          Console.WriteLine(mc.GetLoad(123).GetType());
    
          Console.WriteLine();
          //取得現在 GetLoad 中的 T 為何種型別,下方為 String
          Console.WriteLine(mc.GetLoad("Test by Nobel").GetType());
    
          Console.ReadKey();
    
        }
    
        
      }
    
      class MyClass
      {
        public T GetLoad<T> (T arg)
        {
          Console.WriteLine(arg);
          return arg;
        } 
      }
    }
    


    如上,使用 GetType() 就可以取得你要的~

    上述範例我是使用 int 及 string....

     

     

     

     

     

     

     


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    2011年7月13日 14:05
  • public override T Load<T>(string assetName)
            {
                Myclass obj = new Myclass();
                if (obj is T)
                {
                    object obj1 = GetOOXXObject(string assetName);
                    return (T)obj1;
                }
                return default(T);
            }
    我自己写了这段非常丑陋的代码,好像可以实现这个需求,请问有没有比较好的方法
    2011年7月14日 1:24
  • dear

    在泛型里面使用条件判断就失去使用泛型的意义会破坏味道,可以在优化,把MyClass继承同一个界面,你就可以少掉判断式。

    http://www.dotblogs.com.tw/yc421206/archive/2011/05/19/25543.aspx

    还有几个简单的例子你可参考看看,说不定对你更有帮助

    http://www.dotblogs.com.tw/yc421206/archive/2011/05/20/25595.aspx
    http://www.dotblogs.com.tw/yc421206/archive/2011/05/20/25615.aspx

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已标记为答案 路过君 2011年7月18日 2:54
    2011年7月16日 8:38
  • 已拜读,受益良多,非常感谢!


    2011年7月18日 2:54