浅析C#的复制和克隆

本文浅析了C#的复制和克隆技术,对于有需要的朋友可以参考下。

在C#中,用HashTable,DataTable等实现复制和克隆,下面直接看例子:

HashTable ht = null;
ht = new HashTable();
foreach(string s in ht)
{
//...
}
//上面遍历的时候需要修改HashTable中的键值,一般会报异常,提示您的集合已修改XXX什么的,因为foreach遍历的时候,in 后面的集合不可更改
//这个时候应该我想到了,应该在便利之前复制一份,
HashTable ht2 = new HashTable();
ht.Copy(ht2,0);

以上代码能调试通过,但是问题又来了,当我们修改了ht2中了的键值之后,发现ht中的键值也修改了,显然这不是我想要的结果,然后略微思考,用了Clone(),问题得以解决。

DataTable同样,DataTable dt2 = dt.Copy()复制或者直接给值都是不可以的,同样会改变原来的datatble中的值

这里需要修改HashTable中的键值,一般会报异常,提示您的集合已修改XXX什么的,因为foreach遍历的时候,in 后面的集合不可更改
这个时候应该我想到了,应该在遍历之前复制一份

(0)

相关推荐

  • C# Bitmap 复制的小例子

    复制代码 代码如下: public Bitmap CopyBitmap(Bitmap source){    int depth = Bitmap.GetPixelFormatSize(source.PixelFormat); if (depth != 8 && depth != 24 && depth != 32)    {        return null;    } Bitmap destination = new Bitmap(source.Width, sou

  • 深入C# 内存管理以及优化的方法详解

    在C# winform应用程序中,用以下代码可以进行一些内存使用的优化 复制代码 代码如下: using System;using System.Diagnostics;using System.Runtime.InteropServices;/// <summary>/// 包含各种内存管理.优化的方法/// </summary>    public class Memory    {        private static readonly Version myVersio

  • C#之CLR内存深入分析

    本文不再对值类型进行讨论,主要讨论一下引用类型.如要看内存值类型的朋友可以看一下前一篇C#之CLR内存原理初探. C#引用类型具体分析如下: 先来装备两个类: internal class Employee { public static Employee LookUp(string name) { return null; } public virtual string GetProgressReport() { return string.Empty; } } internal class

  • 使用C#调用系统API实现内存注入的代码

    复制代码 代码如下: //首先导入命名空间 using System.Runtime.InteropServices; /// <summary> /// 在指定进程的虚拟地址空间中保留或开辟一段区域..除非MEM_RESET被使用,否则将该内存区域初始化为0. /// </summary> /// <param name="process">需要在其中分配空间的进程的句柄.这个句柄必须拥有PROCESS_VM_OPERATION访问权限</p

  • C# 对文件与文件夹的操作包括删除、移动与复制

    在.Net中,对文件(File)和文件夹(Folder)的操作可以使用File类和Directory类,也可以使用FileInfo类和DirectoryInfo类.文件夹(Folder)是只在Windows操作系统中使用的名词.在操作系统的理论中,人们更习惯于使用目录(Directory)这个名词.或许微软为了有朝一日将.Net移植到其他的操作系统中(实际上也有很多人也在做着这个项目),所以还是以Directory来命名操作文件夹的类. File类和Directory类都是静态类.使用它们的好处

  • c#根据文件大小显示文件复制进度条实例

    初学者,照着书上的抄袭制作,但已经理解了里面的意思和应用,并且进行了稍微改善和异常捕捉.这里记录下,以防以后用到这方面的知识点. 窗体设计: code: 复制代码 代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.

  • C#实现把dgv里的数据完整的复制到一张内存表的方法

    本文实例讲述了C#实现把dgv里的数据完整的复制到一张内存表的方法,相信对大家学习C#有一定的借鉴价值. 具体实例代码如下: /// <summary> /// 方法实现把dgv里的数据完整的复制到一张内存表 /// </summary> /// <param name="dgv">dgv控件作为参数 </param> /// <returns>返回临时内存表 </returns> public static Da

  • C#之CLR内存原理初探

    本文初步讲述了C#的CLR内存原理.这里所关注的内存里面说没有寄存器的,所以我们关注的只有托管堆(heap),栈(stack), 字符串常量池(其中string是一个很特殊的对象) 首先我们看两个方法: void M1() { string name = "Tom"; M2(name); } void M2(string name2) { int length = 10; double rate = 10.0; name2 = "Joe"; return; } 这里

  • C#之CLR内存字符串常量池(string)

    C#中的string是比特殊的类,说引用类型,但不存在堆里面,而且String str=new String("HelloWorld")这样的重装也说没有的. 我们先来看一个方法: class Program { static void Main(string[] args) { String s = "HelloWorld"; Console.WriteLine(s); } } 然后我们用ildasm.exe工具把它生成IL语言来看一看它里面是怎么玩的: .met

  • 分享C#操作内存读写方法的主要实现代码

    复制代码 代码如下: using System.Runtime.InteropServices; using System.Text; publicclass Function { //C#操作内存读写方法publicstaticbyte PtrToByte( int Ptr ) { byte b = Marshal.ReadByte( ( IntPtr ) Ptr ); return b; } publicstaticchar PtrToChar( int Ptr ) { byte b = M

  • c#文件的复制,移动,创建(实例代码)

    复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) {     if (!Page.IsPostBack)     {         this.List();     } } protected void Button1_Click(object sender, EventArgs e) {     if (TextBox2.Text == "")     {         Response.Write(&

随机推荐