日期:2014-05-17  浏览次数:21005 次

如何取出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限制继承这个接口

------解决方案--------------------
引用:
简单点也可以用反射去取
如: string username=T.GetType().GetProperty("UserName").GetValue(T,null).ToString();


也可以加一个接口
public interface IModel
{
    string UserName{get;set;}
    string UserS……

继续说接口
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就可以了