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

如何通过字符串变量引用对应名称的Dictionary实例?

如何通过字符串变量引用对应的Dictionary实例?

你当前代码里的newDict是方法内的局部变量,C#无法直接通过字符串名称直接引用局部变量,以下是两种可行的解决思路:

方案一:用容器字典管理目标字典

最直接且安全的方式是创建一个"字典的字典",把所有需要通过名称引用的字典实例存入其中,再通过字符串key获取目标字典:

static void Info(string option, string obj)
{
    var newDict = new Dictionary<string, int>()
    {
        {"Test", 0},
        {"Test2", 1}
    };
    
    // 建立名称到字典实例的映射
    var dictMap = new Dictionary<string, Dictionary<string, int>>
    {
        ["newDict"] = newDict
    };
    
    // 通过obj参数获取对应字典
    if (dictMap.TryGetValue(obj, out var targetDict))
    {
        // 这里可以正常使用targetDict,比如遍历输出
        foreach (var item in targetDict)
        {
            Console.WriteLine($"{item.Key}: {item.Value}");
        }
    }
    else
    {
        Console.WriteLine($"不存在名为{obj}的字典");
    }
}

方案二:将字典改为类成员后用反射获取

如果能把newDict从局部变量改为类的字段/属性,可以通过反射根据名称获取实例,但反射性能较低且不够直观,仅适合成员变量场景:

public class DictHolder
{
    // 将字典改为类的私有字段
    private Dictionary<string, int> newDict = new Dictionary<string, int>()
    {
        {"Test", 0},
        {"Test2", 1}
    };

    static void Info(string option, string obj)
    {
        var holder = new DictHolder();
        // 通过反射获取指定名称的字段
        var field = typeof(DictHolder).GetField(obj, 
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        
        if (field != null)
        {
            var targetDict = field.GetValue(holder) as Dictionary<string, int>;
            if (targetDict != null)
            {
                // 使用获取到的字典
            }
        }
    }
}

注意:局部变量存储在栈内存中,C#反射无法直接访问,因此方案一才是局部变量场景下的最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:25