有一个函数如下:
public T FindObject<T>(string sql)
{
//这里需要实例化一个T的对象
//比如说
T t = default(T)
//但是这样只能得到的自定义类是null的,在下面根本无法给它赋值
}
public T FindObject<T>(string sql)
{
//这里需要实例化一个T的对象
//比如说
T t = default(T)
//但是这样只能得到的自定义类是null的,在下面根本无法给它赋值
}
t.××=××;
这样就赋值了啊。。
T _t = new T();
_t.Name = "";
所谓实例化自然是指实例化一个类(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才有意义的.
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;}
}
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;}
}
public T FindObject<T>(string sql) where T : new()
{
//这里需要实例化一个T的对象
//比如说
T t = new T();
//但是这样只能得到的自定义类是null的,在下面根本无法给它赋值
}