求教如何获得一个实例的拷贝副本?

happyjun2000 2005-02-23 08:26:48
现有一个
htmltable tb ;
//init tb
--
//init tb
然后想得到tb的一个copy副本,
用htmltable tbcopy = tb ;好象是不可以的,但是tb没有提供copyto或者clone函数,只有htmltablecell提供了copyto(),
我应该怎样快速高效的得到tb的copy?
谢谢!
...全文
216 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyjun2000 2005-02-23
  • 打赏
  • 举报
回复
xixigongzhu(夕夕宝贝)
您说的应该也是可行的,

但是tr = tbSource.Rows[i] ;
到底是做了什么呀,郁闷:<
xixigongzhu 2005-02-23
  • 打赏
  • 举报
回复
方法Clone如下:
private object Clone(object source )
{
MethodInfo mi = typeof(object).GetMethod("MemberwiseClone",BindingFlags.NonPublic|BindingFlags.Instance);
return mi.Invoke(tbSource,null);
}

然后再这样试试:
tr = (HtmlTableRow) Clone(tbSource.Rows[i]);
tb.Rows.Add ( tr ) ;
xixigongzhu 2005-02-23
  • 打赏
  • 举报
回复
tr = new HtmlTableRow( ) ;
tr = tbSource.Rows[i] ;
tb.Rows.Add ( tr ) ;

你把另一个表的行对象直接添加到了这个表,可能这样不行
happyjun2000 2005-02-23
  • 打赏
  • 举报
回复
为什么下面的循环在执行了一次以后,就报错误:tbSource.Rows[i]下标越界,好象执行tr = tbSource.Rows[i] ;后就把那个Rows丢失了,但

是我也拷贝过了啊,怎么还是会丢失,怎么回事?
大家指教!
//
for ( int i = 0 ; i < 3; i++ )
{
tb = new HtmlTable ( ) ; //table begin
tb.Width = "100%" ;

//body
tr = new HtmlTableRow ( ) ; //row begin
td = new HtmlTableCell ( ) ; //cell begin
td.Width = "100%" ;
HtmlTable tbBodyCopy = CloneHtmlTable ( tbBody ) ; //tbBody是个已经存在的表
HtmlTable tbBodyTemp = InitHtmlTable ( tbBodyCopy ) ;
td.Controls.Add ( tbBodyTemp ) ;
tr.Controls.Add ( td ) ; //cell end
tb.Controls.Add ( tr ) ; //row end


divContent.Controls.Add ( tb ) ; //table end
}
//
private HtmlTable InitHtmlTable ( HtmlTable tbSource )
{
HtmlTable tb ;
HtmlTableRow tr ;
tb = new HtmlTable( ) ;
for ( int i = 0; i < tbSource.rows.count; i++ )
{
tr = new HtmlTableRow( ) ;
tr = tbSource.Rows[i] ;
tb.Rows.Add ( tr ) ;
}
return tb ;
}
//
private HtmlTable CloneHtmlTable ( HtmlTable tbSource )
{
MethodInfo mi =

typeof(object).GetMethod("MemberwiseClone",BindingFlags.NonPublic|BindingFlags.Instance);
HtmlTable tbcopy = (HtmlTable)mi.Invoke(tbSource,null);
return tbcopy ;
}
happyjun2000 2005-02-23
  • 打赏
  • 举报
回复
MemberwiseClone创建当前 Object 的浅表副本。
如果要得到一个深层副本怎么做?
cdo 2005-02-23
  • 打赏
  • 举报
回复
学习
happyjun2000 2005-02-23
  • 打赏
  • 举报
回复
to xixigongzhu(夕夕宝贝)
方法是可行的,谢谢!

还有什么其他方法吗?
欢迎指教!
web_gus 2005-02-23
  • 打赏
  • 举报
回复
学习
bflovesnow 2005-02-23
  • 打赏
  • 举报
回复
mark
xixigongzhu 2005-02-23
  • 打赏
  • 举报
回复
MethodInfo mi = typeof(object).GetMethod("MemberwiseClone",BindingFlags.NonPublic|BindingFlags.Instance);
htmltable tbcopy = (htmltable)mi.Invoke(tb,null);
xixigongzhu 2005-02-23
  • 打赏
  • 举报
回复
有个比较笨的办法
yizhixiaozhu 2005-02-23
  • 打赏
  • 举报
回复
up
sutalon 2005-02-23
  • 打赏
  • 举报
回复
没有做过,帮你 顶


up
linuxyf 2005-02-23
  • 打赏
  • 举报
回复
建议一种方法,你先把tb序列化,然后定义另一个htmltable对象,再反序列化把结果赋给它。
xixigongzhu 2005-02-23
  • 打赏
  • 举报
回复
tbSource.Rows[i]只是简单的读取而已
是tb.Rows.Add ( tr )这个起作用
happyjun2000 2005-02-23
  • 打赏
  • 举报
回复
感谢夕夕宝贝(公主)
明天结贴!

110,538

社区成员

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

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

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