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

希望各位帮忙想想,谢谢!
展开
 我来答
hyjiacan
推荐于2018-02-26 · TA获得超过3912个赞
知道小有建树答主
回答量:894
采纳率:100%
帮助的人:1075万
展开全部
虽然我不是很懂,但是我觉得你的思路就不对。首先,泛型 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;
}
DoramiHe
2017-04-09 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25335 获赞数:59536
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
虽然我不是很懂,但是我觉得你的思路就不对。首先,泛型 T 是类,也就是一个类型为 T 的类,而 Type 是指一个类型,不能指类,所以你返回 type 是不正确的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小家伙63
2019-10-28
知道答主
回答量:1
采纳率:0%
帮助的人:674
展开全部

可以把Type转成T类型,在方法或者类没有标注<T>的情况下,使用反射MakeGenericMethod的方法就好了,楼上的回答估计都是对泛型和反射不了解,

具体的代码可以参考我的例子

网页链接

最底部的SetNavigation和SetValue就是在不知道T类型的情况下获取T类型

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式