如何取出t中的Model?在线等!
我现在定义了一个方法如下:
public bool LoadPlugin<T>(string pluginName, T t)
,第二个参数是T类型的,现在我在调用这个方法的时候给T传入了一个Model,我断点调试的时候,看了下t里面的确是一个Model,也有值。现在的问题是我如何取出这个t中的值。 比如我传入一个UserInfoModel,里面有UserName和UseSex,现在我如从t中把UserName和UserSex取出来。 不知道我表达清楚没,求大神,谢谢! 现在等!
T
Model
------解决方案--------------------简单点也可以用反射去取
如:?string username=T.GetType().GetProperty("UserName").GetValue(T,null).ToString();
也可以加一个接口
public interface IModel
{
string UserName{get;set;}
string UserSex{get;set;}
}
让T限制继承这个接口
------解决方案--------------------
继续说接口
public bool LoadPlugin<T>(string pluginName, T t) where T:IModel
{
//这里就可以访问接口的属性了
t.UserName="...";
t.UserSex-"...";
}
------解决方案--------------------加入能强转的话,请问你怎么直接强转?你不也得写很多类型来强转吗?
所以如果类型多的话,你必须按第二个方法来,即用接口限制的方法来
------解决方案--------------------可以用类来限制T,那你把T:IModel改成T:Model
public bool LoadPlugin<T>(string pluginName, T t) where T:Model
{
//这里就可以访问接口的属性了
t.UserName="...";
t.UserSex-"...";
}
------解决方案--------------------在函数中加上 判断 ,然后转型.
if(t is class){
calss obj= t as calss;
}
//但是类型过多 ,你得写很多这样的判断 以及转换.
------解决方案--------------------你是想类似的动态赋值?
------解决方案--------------------你把泛型方法和普通方法搞混淆了,如果你方法内部强制访问UserName和UseSex,那么就意味着你的T必须包含这两个属性,那么你还不如用结构约束,结构中必定含有这两个属性。
------解决方案--------------------你既不想接口限制,又不想基类来限制,还不想反射
你想怎么样?
按7楼那样判断吧,写100个if就可以了