我不明白 C# 中以下 linqpad 查询的结果。评论应该解释我困惑的地方。
void Main()
{
Dictionary<string, testClass> test = new Dictionary<string, testClass>();
string key = "key";
testClass val = null;
test.Add(key, val);
val = new testClass();
test[key].Dump(); //returns null. WHAT? I just set it!!!
test[key] = val;
val.Text = "something";
// returns val object, with Text set to "Something".
// If the above didn't work, why does this work?
test[key].Dump();
val.Text = "Nothing";
// return val object, with Text set to "Nothing".
// This, I expect, but, again, why didn't the first example work?
test[key].Dump();
val = null;
// returns val object, with Text set to "Nothing"...WHAT??
// Now my head is going to explode...
test[key].Dump();
}
// Define other methods and classes here
public class testClass
{
public override string ToString()
{
return Text;
}
public string Text { get; set;}
}
主要原因是变量(val
) 不是对象。它仅包含对对象(或 null)的引用。
testClass val = null
声明一个类型的变量testClass
并将其设置为空。它不指向任何对象。
test.Add(key, val)
在字典中添加一个指向 null 的条目(注意:它doesn't指向val
它也不指向任何对象)。
val = new testClass();
创建一个new的实例testClass
and val
现在指向那个新对象。test[key]
仍然为空并且不指向任何对象。
test[key] = val;
val.Text = "something";
test[key].Dump();
这段代码点test[key]
到同一个对象val
指着。再次注意它不是指向val
。当您更改对象时val.Text = "something"
你可以使用看到变化test[key].Dump()
因为它们都指向同一个对象。
val.Text = "Nothing";
test[key].Dump();
当你设置val.Text
到字符串“Nothing”你可以看到变化test[key]
出于与上述相同的原因,它们都指向同一个对象.
val = null;
test[key].Dump();
这段代码设置val
指向 null。test[key]
still指向物体。现在val
and test[key]
指向不同的事物。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)