none
c#里面,引用类型可以转为值类型嘛? RRS feed

  • 问题

  • 我很疑问,引用类型的赋值其实是地址的赋值,那么也就是赋值后修改的东西两个变量中都会变

    如何才能使修改后,一个变,一个不变啊,也就是变成值类型,或者是复制这一段内存中的数据到另一断内存中

    2012年2月21日 9:14

答案

  • C#里不提倡直接操作内存。

    我理解你的意思应该是:你要对一个对象赋值,但又想保留原来的值。那你只能克隆一个一模一样的对象,改变新克隆出来的对象,原有的那个不要动。例如:

    class MyClass
    {
    	public string Name { get; set; }
    	public List<int> List { get; set; }
    }
    
    class Program
    {
    	static void Main(string[] args)
    	{
    		MyClass origin = new MyClass();
    		origin.Name = "A";
    		origin.List = new List<int>() { 1, 2, 3 };
    
    		MyClass copy = new MyClass();
    		copy.Name = origin.Name;
    		// copy.List = origin.List; 这样相当于引用了origin的成员
    		copy.List = new List<int>();
    		foreach (int item in origin.List)
    		{
    			copy.List.Add(item);
    		}
    
    		// 现在可以放心使用copy的值了,origin的不会改变了
    	}
    }

    如果不明白,请先好好理解一下C#里的引用类型和值类型。
    2012年2月21日 11:29