c# 中如何将Type转化成泛型T类型
可能是任一个类型的T,Typetype=typeof(T);然后我将从数据库读取的数据用PropertyInfo.SetValue(type,value);方式加到typ...
可能是任一个类型的T,Type type = typeof(T);
然后我将从数据库读取的数据用 PropertyInfo.SetValue(type,value); 方式
加到type中后,怎么 return (T)type;
付加:
public static T SelectId(string key)
{
Type type = typeof(T);
string tableName = (type.GetCustomAttribute(typeof(MyTableAttribute)) as MyTableAttribute).TableName;
PropertyInfo[] pis = type.GetProperties();
string sql = string.Format("select * from {0}", tableName);
foreach (PropertyInfo pi in pis)
{
MyPropertyAttribute pa = (type.GetCustomAttribute(typeof(MyPropertyAttribute)) as MyPropertyAttribute);
if (pa.LieIsPrimaryKey)
{
sql = string.Format(" where {0}='{1}'", pa.LieName, key);
}
}
SqlConnection con = new SqlConnection(strCon);
DataTable table = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sql,con);
da.Fill(table);
foreach (PropertyInfo pi in pis)
{
MyPropertyAttribute pa = (type.GetCustomAttribute(typeof(MyPropertyAttribute)) as MyPropertyAttribute);
pi.SetValue(type, table.Rows[0][pa.LieName]);
}
Type a = type.GetType();
return type as T; //这里会报错
}
有办法解决吗?求大神帮助!谢谢!
我对问题没有说情楚,我需要的是:
如将泛型T作为Users类(数据库的实体类),而我传一个Users表的主键(string类型如上的key)过来,需要返回有完整属性值的Users类,大概需求就是这样。
付:Users类与其中属性都有一个特性有以下功能
Users:表名 >MyTableAttribute
属性:列名,数据类型,是否主键,是否自动增长 >MyPropertyAttribute
希望各位帮忙想想,谢谢! 展开
然后我将从数据库读取的数据用 PropertyInfo.SetValue(type,value); 方式
加到type中后,怎么 return (T)type;
付加:
public static T SelectId(string key)
{
Type type = typeof(T);
string tableName = (type.GetCustomAttribute(typeof(MyTableAttribute)) as MyTableAttribute).TableName;
PropertyInfo[] pis = type.GetProperties();
string sql = string.Format("select * from {0}", tableName);
foreach (PropertyInfo pi in pis)
{
MyPropertyAttribute pa = (type.GetCustomAttribute(typeof(MyPropertyAttribute)) as MyPropertyAttribute);
if (pa.LieIsPrimaryKey)
{
sql = string.Format(" where {0}='{1}'", pa.LieName, key);
}
}
SqlConnection con = new SqlConnection(strCon);
DataTable table = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sql,con);
da.Fill(table);
foreach (PropertyInfo pi in pis)
{
MyPropertyAttribute pa = (type.GetCustomAttribute(typeof(MyPropertyAttribute)) as MyPropertyAttribute);
pi.SetValue(type, table.Rows[0][pa.LieName]);
}
Type a = type.GetType();
return type as T; //这里会报错
}
有办法解决吗?求大神帮助!谢谢!
我对问题没有说情楚,我需要的是:
如将泛型T作为Users类(数据库的实体类),而我传一个Users表的主键(string类型如上的key)过来,需要返回有完整属性值的Users类,大概需求就是这样。
付:Users类与其中属性都有一个特性有以下功能
Users:表名 >MyTableAttribute
属性:列名,数据类型,是否主键,是否自动增长 >MyPropertyAttribute
希望各位帮忙想想,谢谢! 展开
3个回答
展开全部
虽然我不是很懂,但是我觉得你的思路就不对。首先,泛型 T 是类,也就是一个类型为 T 的类,而 Type 是指一个类型,不能指类,所以你返回 type 是不正确的。
追问
我也想到了,是有这个问题。我对问题没有说情楚,我需要的是:
如将泛型T作为Users类(数据库的实体类),而我传一个Users表的主键(string类型如上的key)过来,需要返回有完整属性值的Users类,大概需求就是这样。
追答
大概这样写吧。。
public T GetEntity<T>(string id)
{
Type type = typeof(T);
// 创建一个类T的实例
object entity =type.Assembly.CreateInstance(type.FullName) ;
// 得到类T的名称(不包含命名空间)
string name = type.Name;
// 获取类T的所有属性
PropertyInfo[] props = type.GetProperties();
// 这里使用 i 来模拟你数据库查询出的数据
int i = 4;
// 遍历类T的属性赋值
foreach (PropertyInfo prop in props)
{
/// 你查数据库的时候
/// 这里的 i.ToString() 就换成数据
/// DataRow row = table.Rows[i];
/// prop.SetValue(entity, row[prop.Name]);
/// 注意这里的 entity,是通过泛型T创建的实例对象,而不是类型 type
prop.SetValue(entity, i.ToString());
// 这里是使每个属性的值不同,模拟数据用的
i += 3;
}
return (T)entity;
}
2017-04-09 · 知道合伙人互联网行家
关注
展开全部
虽然我不是很懂,但是我觉得你的思路就不对。首先,泛型 T 是类,也就是一个类型为 T 的类,而 Type 是指一个类型,不能指类,所以你返回 type 是不正确的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以把Type转成T类型,在方法或者类没有标注<T>的情况下,使用反射MakeGenericMethod的方法就好了,楼上的回答估计都是对泛型和反射不了解,
具体的代码可以参考我的例子
最底部的SetNavigation和SetValue就是在不知道T类型的情况下获取T类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询