簡體   English   中英

C#int不包含Clone的定義

[英]C# int does not contain a definition for Clone

我有一個我需要復制的字典,因為不可能在foreach循環中更改字典。 (將導致錯誤“集合被修改;枚舉操作可能無法執行”)

dictTemp.Add(dict);

只會將一個字典引用到另一個字典。 我試圖復制它

foreach (KeyValuePair<string, int> entry in dict)
{
    if (!dict.ContainsKey(entry.Key))
    {
        dictTemp.Add(entry.Key, entry.Value);
    }
    else
    {
        dictTemp[entry.Key] = entry.Value;
    }
}

但是我仍然犯錯,所以我認為鍵和值的加法只是一個參考。 我研究了這個問題,並通過Clone(.Net 2.0)進行了深度復制,找到了解決方案。 https://stackoverflow.com/a/139841/3772108

foreach (KeyValuePair<string, int> entry in dict)
{
    if (!dict.ContainsKey(entry.Key))
    {
        dictTemp.Add(entry.Key, entry.Value.Clone());
    }
    else
    {
        dictTemp[entry.Key] = entry.Value;
    }
}

但是在.Net 4.5中是不可能的,因為消息“'int'不包含Clone的定義,也找不到擴展方法Clone接受類型為'int'的第一個參數”

現在是我在2017年的問題,怎么可能完全復制字典。 (不引用它)還是有一種更聰明/更好的方法?

首先,您嘗試克隆一個int而不是字典。 您不需要克隆值類型,只需將它們分配給變量即可獲得“克隆”。

您的foreach循環也有一個錯誤,您檢查是否是!dict.ContainsKey而不是!dictTemp.ContainsKey

foreach (KeyValuePair<string, int> entry in dict)
{
    if (!dictTemp.ContainsKey(entry.Key))
    {
        dictTemp.Add(entry.Key, entry.Value);
    }
    else
    {
        dictTemp[entry.Key] = entry.Value;
    }
}

最后,您可以使用構造函數獲取“克隆”:

var dictTemp = new Dictionary<string, int>(dict);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM