我正在使用C#,.Net 4.0,並且我想做一個簡單的任務來複制字典中的Item(顯然有不同的關鍵字)。在字典中修改複製的數據會修改原始文件
我遇到了一些問題。
當我做最初的副本時,我沒有任何問題。當我更改副本的值時,原件的值也會更改。爲什麼是這樣?
private void CopyItem(Guid newItemKey, Guid oldItemKey)
{
this.dictionary[newItemKey] = this.dictionary[oldItemKey];
this.dictionary[newItemKey].Id = newItemKey;
}
// this.dictionary[oldItemKey].Id is now equal to newItemKey... Why?
我也曾嘗試:
private void CopyItem(Guid newItemKey, Guid oldItemKey)
{
var value = this.dictionary[oldItemKey];
value.Id = newItemKey;
this.dictionary[newItemKey] = value;
}
// this.dictionary[oldItemKey].Id is now equal to newItemKey... Why?
我仍然得到同樣的結果。
推測字典包含一些引用類型。你需要[閱讀此](http://www.albahari.com/valuevsreftypes.aspx)。 [也是這個](http://stackoverflow.com/questions/5057267/what-is-the-difference-between-a-reference-type-and-value-type-in-c) –
什麼是項目?如果它是一個引用類型,那麼你沒有創建該項目的副本,你正在複製該引用,它們都引用同一個對象。 –
問題的確是這兩個值只是對同一個對象的引用。 **我**會問的問題是您爲什麼要複製東西?你幾乎從不想在任何程序中這樣做,因爲這是一個讓你頭痛的難題。很可能,你正在考慮一個問題的錯誤解決方案。 – MarioDS