如下一段代码void (struct a)
{
  struct b=new struct()
  b=a;
  change to b;
}
为什么执行完以后a的值也变了呢?

解决方案 »

  1.   

    change to b 是什么?就你的例子看, a 的值是不应该变的,因为 struct 是值类型
      

  2.   

    change to b就是对b进行操作啊,完了之后就是a的值也跟着变了,因为a里有很多数组,不想用循环来赋值,所以就b=a,如果用循环来赋值的话对b操作后a就不会变
      

  3.   

    不会啊,struct是值类型。下面的结果为:1,1,3
    using System;
    using System.Collections.Generic;
    using System.Text;namespace structdos
    {
        struct Ms
        {
            public int a;
            public  Ms(int b)
            {
                a = b;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Ms first = new Ms(1);
               
                Console.Write(first.a.ToString() + "\r\n");
                Console.Read();
                ChangeA(first);
            }       
            private static void ChangeA (Ms fir)
            {
                Ms second=new Ms(2);
                second =fir;
                second.a = 3;            Console.Write(fir.a.ToString()+"\r\n");
                Console.Write(second.a.ToString()+"\r\n");
                Console.Read();
                        }
            
        }
    }
      

  4.   

    结构是值类型,所以赋值后,对新结构的改变不会改变原来结构它里面成员的值(对于他的成员,如果是值类型,值类型值不变,如果是引用类型,你就要注意了,他不变的是引用的地址,实际引用指向的值会跟着变化,因为它们引用的是同一块内存)。这也就是你这个结构里的数组值会变了,数组是引用类型System.Array.测试代码public class MyClass
        {
            private int myvalue;        public int MyValue
            {
                get { return myvalue; }
                set { myvalue = value; }
            }        public MyClass(int myvalue)
            {
                this.myvalue = myvalue;
            }
        }    public struct MyStruct
        {
            public int a;
            public double b;
            public MyClass myCls;
            public int[] myArray;
        }MyStruct a = new MyStruct();
                a.a = 1;
                a.b = 2f;
                a.myCls = new MyClass(3);
                a.myArray = new int[] { 1,2,3};            MyStruct b = new MyStruct();
                b = a;            b.a = 4;
                b.b = 5f;
                b.myCls.MyValue = 6;
                b.myArray[0] = 4;
                b.myArray[1] = 5;
                b.myArray[2] = 6;
                
                MessageBox.Show(a.a.ToString() + "," + a.b.ToString() + "," + a.myCls.MyValue.ToString() + "," + a.myArray[0].ToString());
                MessageBox.Show(b.a.ToString() + "," + b.b.ToString() + "," + b.myCls.MyValue.ToString() + "," + b.myArray[0].ToString());
      

  5.   

    change to b;????????????????????????????????什么东东?
    struct是值类型。切记.
      

  6.   


    struct为结构类型,改变b,a的值不应该变!
      

  7.   

    C#中的数据类型分为两种, 值类型和引用类型
    值类型包括struct,基本数据类型等
    引用类型包括class,interface,数组等
    创建两个值类型的实例,并且进行相互赋值操作,
    若更改了其中一个实例的值,另一个是不会跟着变的。
    创建两个引用类型的实例,并且进行相互赋值的操作,
    若更改了其中一个实例的值,另一个会跟着变的。值类型和引用类型的主要区别就是变量在内存的存储方式不同。LZ可以试着写一个类和一个结构,然后分别实例化,并且进行赋值操作。
    然后试着改变对象的某一属性的值,看看另一个是不是也跟着变。值得注意的是,string类型是一种特殊的类型,它是引用类型,但是表现的却是值类型的性质。
      

  8.   

    struct 是值类型,肯定发生改变,如果是引用类型的话就不变,建议楼主去百度搜索值类型和引用类型!