• C#中使用list Add的问题


    namespace ConsoleApplication2
    {
    class Program
    {
    static void Main(string[] args)
    {
    List a = new List();
    record temp = new record();
    temp.str = "hey";
    a.Add(temp);
    temp.str = "hello";
    a.Add(temp);
    return;
    }
    }
    class record
    {
    public string str;
    }
    }

    为什么运行之后a中的两个都是hello而不是第一个hey第二个hello。
    另外还有一点,如果把List a = new List();写在main函数外面,为什么会报错说:
    错误 1 非静态的字段、方法或属性“ConsoleApplication2.Program.a”要求对象引用

    我来帮他解答

     
    提问者采纳
    2011-05-15 21:25
    朋友,你添加了两次temp 到list里是没有错的

    你的思路也是正确的,但是你不知道底层的原理 String 对象是引用类型,也就是 你第二次temp.str="hello" 改这个的时候,它不是单单改变量的值,而是改了,对应的内存容量地址的值了,所以2次的值都是一样的

    你这样改下就不会一样了
    List a = new List();
    record temp = new record();
    temp.str = "hey";
    a.Add(temp);
    temp=new record(); //注意是这样,一定要加上,这个的意思就是再开一个内存空间,这样你改值 的话,就不会把前一个也改了
    temp.str = "hello";
    a.Add(temp);
    return;
  • 相关阅读:
    php apc 安装
    apaache php 日记设计
    memcache windows64 位安装
    JavaScript的作用域与闭包
    怎样写一个简单的操作系统?
    php 关于锁的一些看法
    Windows版本Apache+php的Xhprof应用__[2]
    Windows版本Apache+php的Xhprof应用
    使用TortoiseGit对Git版本进行分支操作
    机器学习数据不均衡问题
  • 原文地址:https://www.cnblogs.com/zcm123/p/3027894.html
Copyright © 2020-2023  润新知