2012-02-10 7 views
0

私は、更新されたバージョンと元のバージョンを比較したいという辞書に問題があります。ByrefのC#

最初のメソッドは辞書に渡され、そこでそこから、その辞書を更新する静的ヘルパークラスに渡されます。

元の辞書をヘルパークラスに渡す前に、私は比較できるように元の辞書のコピーを作成します。

これは私が問題を抱えているところです。ヘルパークラスの後、辞書の 'コピー'も更新されました。

私は元の辞書の値をコピーすると思っていた辞書を含む構造体を作成しようとしましたが、それはあまりにも参考になりそうです!ここにコードのスニペットがあります。

public PartialViewResult updateItem(string submit, FormCollection Collection) 
{    
    SurveyItem UpdatedItem = new SurveyItem(); 
    ItemSettingsCopy OriginalSettings; 

    ItemBank CurrentSurvey = (ItemBank)Session["Survey"]; 

    string _itemName = (string)Session["CurrentItem"]; 

    OriginalSettings.ItemSettings = CurrentSurvey[_itemName].ItemSettings; 
    //this is where I'm trying to make a copy of the original settings. 

    UpdatedItem = BankManagerHelper.UpdateItem(CurrentSurvey[_itemName], Collection, submit); //static item now updates the fields in the item 

    //AT THIS POINT OriginalSettings.ItemSettings HAS BEEN CHANGED TOO 

答えて

0

辞書を複製する必要があります。

この回答は方法です。 https://stackoverflow.com/a/139841/61256

[このコードは、リンクからコピーされました]

public static Dictionary<TKey, TValue> CloneDictionaryCloningValues<TKey, TValue> 
         (Dictionary<TKey, TValue> original) where TValue : ICloneable 
{ 
    Dictionary<TKey, TValue> ret = new Dictionary<TKey, TValue>(original.Count, 
                 original.Comparer); 
    foreach (KeyValuePair<TKey, TValue> entry in original) 
    { 
     ret.Add(entry.Key, (TValue) entry.Value.Clone()); 
    } 
    return ret; 
} 
+0

ここで扱っているのは、深いコピーと浅いコピー> http://en.wikipedia.org/wiki/Object_copy – MattDavey

+0

ありがとう!私はこれを使用して終了: var newDictionary = oldDictionary.ToDictionary(エントリ=> entry.Key、 エントリ=> entry.Value); – Scottingham

0

私は悩みを抱えているところです。ヘルパークラスの後、辞書の 'コピー' も更新されました。

はい、実際に同じ変数をメモリに更新しています。ファンクションのパラメータとしてDictionaryを渡すと、参照が実際に変数に渡されます。

UpdateItemメソッドを呼び出す前に、同じオブジェクトリストを含む新しい辞書を作成することができます。次に、2つの異なるオブジェクトがメモリに格納されるため、それらを比較することができます。あなたの辞書に保存されている、またはその両方辞書はあなたが辞書自身を比較したい場合、私は知らない(同じオブジェクトにの参照が含まれています項目の新しいインスタンスを作成することもできます

注意または辞書に格納されたオブジェクト)。

+0

しかし、どのように私はそれを参照の一部にすることなく、新しい辞書に値を置くでしょうか? – Scottingham

関連する問題