浅析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 后面的集合不可更改
这个时候应该我想到了,应该在遍历之前复制一份
相关推荐
-
C#实现把dgv里的数据完整的复制到一张内存表的方法
本文实例讲述了C#实现把dgv里的数据完整的复制到一张内存表的方法,相信对大家学习C#有一定的借鉴价值. 具体实例代码如下: /// <summary> /// 方法实现把dgv里的数据完整的复制到一张内存表 /// </summary> /// <param name="dgv">dgv控件作为参数 </param> /// <returns>返回临时内存表 </returns> public static Da
-
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#文件的复制,移动,创建(实例代码)
复制代码 代码如下: 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(&
-
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#调用系统API实现内存注入的代码
复制代码 代码如下: //首先导入命名空间 using System.Runtime.InteropServices; /// <summary> /// 在指定进程的虚拟地址空间中保留或开辟一段区域..除非MEM_RESET被使用,否则将该内存区域初始化为0. /// </summary> /// <param name="process">需要在其中分配空间的进程的句柄.这个句柄必须拥有PROCESS_VM_OPERATION访问权限</p
-
分享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#之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# 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#之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# 内存管理以及优化的方法详解
在C# winform应用程序中,用以下代码可以进行一些内存使用的优化 复制代码 代码如下: using System;using System.Diagnostics;using System.Runtime.InteropServices;/// <summary>/// 包含各种内存管理.优化的方法/// </summary> public class Memory { private static readonly Version myVersio
-
C# 对文件与文件夹的操作包括删除、移动与复制
在.Net中,对文件(File)和文件夹(Folder)的操作可以使用File类和Directory类,也可以使用FileInfo类和DirectoryInfo类.文件夹(Folder)是只在Windows操作系统中使用的名词.在操作系统的理论中,人们更习惯于使用目录(Directory)这个名词.或许微软为了有朝一日将.Net移植到其他的操作系统中(实际上也有很多人也在做着这个项目),所以还是以Directory来命名操作文件夹的类. File类和Directory类都是静态类.使用它们的好处
随机推荐
- 详解Django框架中用户的登录和退出的实现
- jquery下onpropertychange事件的绑定方法
- BAT批处理实现字符串截取功能
- javascript特殊文本输入框网页特效
- javascript字符串拆分成单个字符相加和不超过10,求最终值第1/2页
- MySQL存储引擎总结
- PHP常用代码
- Java中 shuffle 算法的使用
- 获取MSSQL 表结构中字段的备注、主键等信息的sql
- SQL参数化查询的另一个理由 命中执行计划
- jQuery学习笔记之基础中的基础
- 用javascript实现旋转图片效果的代码
- JavaScript 学习笔记之语句
- JavaScript中用toString()方法返回时间为字符串
- 另类调用flash无须激活的方法
- Android中实现GPS定位的简单例子
- Android编程简单获取网络上的图片
- iOS 把图片保存到相册,并获取图片文件名的实例
- vue轮播图插件vue-concise-slider的使用
- PHP后期静态绑定之self::限制实例分析