You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#类中创建每个实例独有的Dictionary?

C#实现每个实例拥有独立Dictionary的方案

你的原代码存在两个核心问题:一是构造函数接收外部Dictionary实例,可能导致多个对象共享同一字典;二是固定三个属性的设计无法灵活支持不同对象的键值对需求。以下是优化后的实现方案:

方案1:带灵活初始化的类实现

这个方案让每个实例自动创建独立字典,同时支持任意数量的键值对初始化,还能动态添加属性:

internal class Item
{
    // 每个实例独立拥有的字典,直接在类内初始化
    private readonly Dictionary<string, string> _properties = new Dictionary<string, string>();

    // 支持任意数量的键值对作为构造参数
    public Item(params KeyValuePair<string, string>[] properties)
    {
        foreach (var kvp in properties)
        {
            _properties.Add(kvp.Key, kvp.Value);
        }
    }

    // 动态添加属性的方法
    public void AddProperty(string key, string value)
    {
        if (!_properties.ContainsKey(key))
        {
            _properties.Add(key, value);
        }
        // 可选:如果键已存在,可抛出异常或覆盖值
    }

    // 获取属性的方法
    public string GetProperty(string key)
    {
        _properties.TryGetValue(key, out var value);
        return value;
    }
}

使用示例

// 创建car对象,初始化speed和price
var car = new Item(
    new KeyValuePair<string, string>("speed", "100"),
    new KeyValuePair<string, string>("price", "2000")
);

// 创建dog对象,初始化age和name
var dog = new Item(
    new KeyValuePair<string, string>("age", "5"),
    new KeyValuePair<string, string>("name", "doggo")
);

// 动态添加属性到新对象
var cat = new Item();
cat.AddProperty("color", "orange");
cat.AddProperty("weight", "3");

方案2:简洁的公共字典属性实现

如果不需要封装,直接暴露公共字典属性,利用C#集合初始化器简化代码:

internal class Item
{
    // 每个实例的独立字典,类内初始化保证独立性
    public Dictionary<string, string> Properties { get; } = new Dictionary<string, string>();
}

使用示例

var car = new Item
{
    Properties = { { "speed", "100" }, { "price", "2000" } }
};

var dog = new Item
{
    Properties = { { "age", "5" }, { "name", "doggo" } }
};

核心要点

  • 保证字典独立性:必须在类内部初始化字典(= new Dictionary<...>),而不是通过构造函数接收外部字典替换,这样每个实例都会生成全新的字典实例。
  • 灵活性:放弃固定数量的属性参数,改用支持任意键值对的初始化方式,满足不同对象的个性化键值需求。

内容的提问来源于stack exchange,提问作者gino pasticcio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:48:23