C#中泛型T的类型的动态指定问题。

suamt 2007-06-01 03:18:34
FillInfoObjFromControls<T>(ref Dcampus_Fruit_DeclareInfo _objDcampus_Fruit_Declare, T _container) where T : System.Web.UI.Control
定义了一个方法,我传入HtmlTable类型给T,在方法体里面判断HtmlTable是否有子控件,有的话就自调用FillInfoObjFromControls方法,那么调用的时候需要传入HtmlTableRow,以此类推。我是这么写的:
Type _tempType = _tempCtl.GetType();
FillInfoObjFromControls<_tempType>(ref _objDcampus_Fruit_Declare, _tempCtl);
出错了。我该怎么写才合适呢?

恩。第一次在这里发帖,都不知道我有没有分来给呢。
...全文
1373 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fortner 2007-06-01
  • 打赏
  • 举报
回复
调用的时候使用
FillInfoObjFromControls(ref _objDcampus_Fruit_Declare, _tempCtl);
来试试看看。
suamt 2007-06-01
  • 打赏
  • 举报
回复
确实对泛型理解不深。HOHO。
既然我的_container参数都是继承自control,那么他们应该都同属一类,也就没有泛型的概念了。所以我改成
public void FillInfoObjFromControls(ref Dcampus_Fruit_DeclareInfo _objDcampus_Fruit_Declare, Control _container),去掉了泛型的使用,而达到了我的目标。
谢谢大家了
scow 2007-06-01
  • 打赏
  • 举报
回复
这个问题和范型无关,改成
FillInfoObjFromControls<Control>(ref _objDcampus_Fruit_Declare, _tempCtl);
suamt 2007-06-01
  • 打赏
  • 举报
回复
xiaojun2009() 请赐教^_^。我承认我是新手。
suamt 2007-06-01
  • 打赏
  • 举报
回复
我想其实可以selectcase一下的。不过是失去的泛型的意义了。我指定了它的where属性只能是control,运行期间任何可能类型都是control继承的。
换个角度说,Type _tempType = _tempCtl.GetType();我这个动态得到的东东不用在泛型上面,我用来转化对象。比如HtmlTableRow _tempCtl = (_tempType)_tempCtlAnother;(当然,这里可以用Convert.ChangeType)是同样会报错。
可能跟hbxtlhx说的一样吧,必须是静态类型。难道没有其他方法了嘛?
xiaojun2009 2007-06-01
  • 打赏
  • 举报
回复
你不理解泛型
xiaojun2009 2007-06-01
  • 打赏
  • 举报
回复
既然用到了泛型,你还要去判断类型,那不是等于没有用?
scow 2007-06-01
  • 打赏
  • 举报
回复
这个范型类型的实例化须是一个编译期能确定类型的东东,你那个运行时才知道具体类型不行
北京的雾霾天 2007-06-01
  • 打赏
  • 举报
回复
这个T应该是一个静态的类型,就像Int,String,Form等等,而不应该是一个Type.
北京的雾霾天 2007-06-01
  • 打赏
  • 举报
回复
泛型好像是在编译阶段决定的,在程序里怎么能动态的设置呢.

我在这里学习一下吧...

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧