浅析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# 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(&
随机推荐
- Prototype1.6 JS 官方下载地址
- jQuery实现延迟跳转的方法
- javascript格式化json显示实例分析
- 用javascript实现的汉字简繁转换
- Canvas实现放射线动画效果
- VS2017 Cordova Ionic2 移动开发环境搭建教程
- php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
- 笑一笑
- 探索PowerShell(十三) WMI对象介绍
- VBS破坏性应用代码
- mysql 导入导出数据库以及函数、存储过程的介绍
- Oracle数据安全面面观
- php实现快速排序的三种方法分享
- iScroll.js 使用方法参考
- 深入理解javascript中concat方法
- 全面提高WindowsFTP服务器的安全性能
- Android入门:广播发送者与广播接收者详细介绍
- axios进阶实践之利用最优雅的方式写ajax请求
- 超实用的android网络工具类
- WPF实现控件拖动的示例代码