首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#有办法给我一个不可变的字典吗?

在C#中,字典本身是可变的,但是可以通过将字典封装在一个不可变的类中来实现不可变的字典。以下是一个简单的示例:

代码语言:csharp
复制
using System.Collections.Generic;
using System.Collections.ObjectModel;

public class ImmutableDictionary<TKey, TValue>
{
    private readonly IDictionary<TKey, TValue> _dictionary;

    public ImmutableDictionary()
    {
        _dictionary = new Dictionary<TKey, TValue>();
    }

    public ImmutableDictionary(IDictionary<TKey, TValue> dictionary)
    {
        _dictionary = new ReadOnlyDictionary<TKey, TValue>(dictionary);
    }

    public TValue this[TKey key] => _dictionary[key];

    public bool ContainsKey(TKey key) => _dictionary.ContainsKey(key);

    public bool TryGetValue(TKey key, out TValue value) => _dictionary.TryGetValue(key, out value);

    public ImmutableDictionary<TKey, TValue> Add(TKey key, TValue value)
    {
        var newDictionary = new Dictionary<TKey, TValue>(_dictionary);
        newDictionary.Add(key, value);
        return new ImmutableDictionary<TKey, TValue>(newDictionary);
    }

    public ImmutableDictionary<TKey, TValue> Remove(TKey key)
    {
        var newDictionary = new Dictionary<TKey, TValue>(_dictionary);
        newDictionary.Remove(key);
        return new ImmutableDictionary<TKey, TValue>(newDictionary);
    }
}

这个类实现了一个不可变的字典,可以通过AddRemove方法添加和删除元素,但是这些方法会返回一个新的不可变字典,而不是修改原始字典。这样可以确保字典的不可变性。

需要注意的是,由于这个类使用了ReadOnlyDictionary来实现只读字典,因此它不能被序列化为JSON或XML格式。如果需要序列化,可以使用其他方法来实现不可变字典。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

9分9秒

想比较全面地学习 SAP 某模块,能指导下从哪里开始呢

14分54秒

最近我收到了 SAP 上海研究院一个部门领导的邀请,参加了一个信息素养故事分享会。我也就"如何快速上

领券