有一个函数如下:
public T FindObject<T>(string sql)
{
//这里需要实例化一个T的对象
//比如说
T t = default(T)
//但是这样只能得到的自定义类是null的,在下面根本无法给它赋值
}

解决方案 »

  1.   

    new完 赋值不就实例化了吗
      

  2.   

    T t = new T().其实你应该把上下文描述的更加清楚一些的...
      

  3.   

    T t = new t();
    t.××=××;
    这样就赋值了啊。。
      

  4.   


    T _t = new T();
    _t.Name = "";
      

  5.   

    你这里说的是泛型吧?
    所谓实例化自然是指实例化一个类(class).你写的那个函数肯定位于某个class中.
    比如:
    public class Test(T)
    {
    public T FindObject<T>(string sql)
    {
    //这里需要实例化一个T的对象
    //比如说
    //T t = default(T)
    //但是这样只能得到的自定义类是null的,在下面根本无法给它赋值
    }
    }
    当你在某个地方实例化Test<T>:
    Test<int> testInt = new Test<int>();

    Test<string> testStr = new Test<string>();
    这样用T才有意义的.
      

  6.   

    不好意思哈~刚才拿手机发帖的没写到位,现在再写一遍,不过有些单词也不记得打了,就拿xx代替了!
    class Test
    {
       public T FindT<T>(string sql)
       {
           //这里写去数据库读取数据
           DataRead dr = com.XXXXXRead();
           //这里要得到一个T的对象才能给他赋值
           //假如是下面这样得到一个T的实例
           T t = default(T);
           if(dr.read())
           {
               Type type = typeof(T);
               //然后有个方法可以获取type的所有公共属性,忘记名字了,只能打出大概来
               PxxxxxInfo[] attributes = type.GetPxxxxxInfo();
               //然后再分别给他的每个属性赋值,但是赋值方法得有一个具体的对象
               //但是我这样T t = default(T);实例化是错的,现在先假设他是对的,那么就这样
               for(int i = 0; i < attributes.length; i++)
               {
                  //t为T的具体对象,attributes[i].Name为属性的字段名称,与数据库相同
                  attributes[i].SetValue(t,dr[attributes[i].Name]);
               }
           }
           return t;
       }
    }
    //下面调用和实体类都没错!!//调用则是这样的
    class testFun
    {
        Test test = new Test();
        modelTest modeltest = test.FindT<modelTest>("select * from modelTest where Id = 1");
    }
    //实体类,对应数据库的表
    class modelTest
    {
        public int Id {get;set;}
        public string Name{get;set;}
        public string NickName{get;set;}
    }
      

  7.   

    不好意思哈~刚才拿手机发帖的没写到位,现在再写一遍,不过有些单词也不记得打了,就拿xx代替了!
    class Test
    {
       public T FindT<T>(string sql)
       {
           //这里写去数据库读取数据
           DataRead dr = com.XXXXXRead();
           //这里要得到一个T的对象才能给他赋值
           //假如是下面这样得到一个T的实例
           T t = default(T);
           if(dr.read())
           {
               Type type = typeof(T);
               //然后有个方法可以获取type的所有公共属性,忘记名字了,只能打出大概来
               PxxxxxInfo[] attributes = type.GetPxxxxxInfo();
               //然后再分别给他的每个属性赋值,但是赋值方法得有一个具体的对象
               //但是我这样T t = default(T);实例化是错的,现在先假设他是对的,那么就这样
               for(int i = 0; i < attributes.length; i++)
               {
                  //t为T的具体对象,attributes[i].Name为属性的字段名称,与数据库相同
                  attributes[i].SetValue(t,dr[attributes[i].Name]);
               }
           }
           return t;
       }
    }
    //下面调用和实体类都没错!!//调用则是这样的
    class testFun
    {
        Test test = new Test();
        modelTest modeltest = test.FindT<modelTest>("select * from modelTest where Id = 1");
    }
    //实体类,对应数据库的表
    class modelTest
    {
        public int Id {get;set;}
        public string Name{get;set;}
        public string NickName{get;set;}
    }
      

  8.   


     public T FindObject<T>(string sql) where T : new()
            {
                //这里需要实例化一个T的对象
                //比如说
                T t = new T();
                //但是这样只能得到的自定义类是null的,在下面根本无法给它赋值
            }