> 백엔드 개발 > C++ > .NET에서 일반 사전의 전체 복사본을 만드는 방법은 무엇입니까?

.NET에서 일반 사전의 전체 복사본을 만드는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-04 15:16:39
원래의
374명이 탐색했습니다.

How to Create Deep Copies of Generic Dictionaries in .NET?

.NET에서 일반 사전의 전체 복사본 생성

일반 사전의 전체 복사본 복제 또는 수행(< cref="Dictionary{ 참조) TKey, TValue}"/>)는 원본에 영향을 주지 않고 원본 데이터 구조를 보존하는 데 필수적입니다. 다음은 몇 가지 접근 방식입니다.

얕은 복제를 사용하는 ToDictionary() 메서드:

키 및 값 참조가 복사되는 얕은 복사본만 필요한 경우 < cref="System.Linq.Enumerable.ToDictionary{TSource, TKey, TElement}(IEnumerable{TSource}, 참조 Func{TSource, TKey}, Func{TSource, TElement})"/> 방법을 사용할 수 있습니다. 다음 예는 얕은 복사를 보여줍니다.

var originalDict = new Dictionary<string, int> { { "Key1", 1 }, { "Key2", 2 } };
var shallowCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => entry.Value);
로그인 후 복사

심층 복제를 사용하는 ToDictionary() 메서드:

중첩된 객체도 재귀적으로 복사되는 전체 복사가 필요한 경우 , 값 유형에 대한 복제를 구현하는 인터페이스입니다. 다음 예에서는 복제를 사용한 전체 복사를 보여줍니다.

class CloneableValue : ICloneable
{
    public int Value { get; set; }

    public object Clone()
    {
        return new CloneableValue { Value = this.Value };
    }
}

Dictionary<string, CloneableValue> originalDict = new Dictionary<string, CloneableValue> { { "Key1", new CloneableValue() { Value = 1 } } };
var deepCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => (CloneableValue)entry.Value.Clone());
로그인 후 복사

사용자 정의 복제 방법:

또는 데이터 구조에 맞는 사용자 정의 복제 방법을 생성할 수도 있습니다. 이 메서드는 사전을 반복하고 키 및 값 개체의 새 인스턴스를 만들고 그에 따라 값을 할당합니다. 예는 다음과 같습니다.

public static Dictionary<string, T> CloneDictionary<T>(Dictionary<string, T> originalDict)
{
    Dictionary<string, T> cloneDict = new Dictionary<string, T>();
    foreach (KeyValuePair<string, T> entry in originalDict)
    {
        cloneDict.Add(entry.Key, (T)entry.Value);
    }
    return cloneDict;
}
로그인 후 복사

접근 방식 선택은 필요한 복제 깊이와 애플리케이션의 특정 요구 사항에 따라 달라집니다. < cref="ToDictionary()"/> 적절한 키와 요소 선택기를 사용하는 방법은 얕은 복사본과 깊은 복사본을 모두 생성하는 다양한 방법을 제공합니다.

위 내용은 .NET에서 일반 사전의 전체 복사본을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿