class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add("num"); dt.Columns.Add("name"); DataRow dr = dt.NewRow(); dr["num"] = "1"; dr["name"] = "张三"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["num"] = "2"; dr["name"] = "李四"; dt.Rows.Add(dr); DataRow ss = dt.Rows[1];
//显示2:::::::::::李四 Console.WriteLine(ss["num"].ToString() + ":::::::::::" + ss["name"].ToString()); //显示2:::::::::::李四
Console.WriteLine(dt.Rows[1]["num"].ToString() + ":::::::::::" + dt.Rows[1]["name"].ToString());
ss["num"] = "4"; ss["name"] = "lao liu";
//显示4:::::::::::lao liu Console.WriteLine(ss["num"].ToString() + ":::::::::::" + ss["name"].ToString()); //显示4:::::::::::lao liu 为什么dt.Rows[1]的值也变了,能说一下原理吗?
Console.WriteLine(dt.Rows[1]["num"].ToString() + ":::::::::::" + dt.Rows[1]["name"].ToString()); Console.ReadKey(); } }
引用类型的变量存放的都是内存中的同一个位置,你修改了,用别的变量访问,显示时变过的值。
string a = "SSS"; string b = a; b = "AAA"; console.write(a);//显示SSS console.write(b );//显示AAA
string 类型变量也是引用类型吧,这段代码跟提问的代码,得出的不同结果,我感觉不太理解。
@阿难: string 类型变量也是引用类型吧 yes
但string 赋值操作是特殊处理过的。不传递引用
@何潮: string 是个特殊的引用类型。string是不可变的,对它的任何操作,都会返回一个新的字符串
ss引用的就是dt.Rows[1]啊,当然会变了。
感觉答案应该就是:ss引用的就是dt.Rows[1]。但是我可能有点装牛角尖了,还是想不怎么通。能帮我补充下引用的基础数据吗,如果能和string的引用做比较那就更好了。谢谢。
感觉答案应该就是:ss引用的就是dt.Rows[1]。但是我可能有点装牛角尖了,还是想不怎么通。能帮我补充下引用的基础知识吗,如果能和string的引用做比较那就更好了。谢谢。
@阿难:
拿string做比较只会更晕。。。感觉对了就行了哈。
DataRow ss = dt.Rows[1];
这段代码的作用是,SS指向dt.Rows[1],它并不会把dt.Rows[1]复制一份,明白了吧?