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

在C#中如何存储对象值并实现类的动态访问?

错误原因

你之前的尝试失败的核心原因是:C#是静态类型语言,元组和静态类的成员都是编译时确定的绑定关系,不支持JavaScript中那种通过字符串变量用方括号语法动态访问成员的特性。JS对象本质是动态键值对集合,但C#的元组、类成员属于固定的编译期元素,方括号语法在这里不适用。

推荐实现方案

方案1:字典+强类型结构(最贴近JS写法)

先定义一个封装操作属性的类型(C# 9+推荐用record,更简洁),再用Dictionary<string, Operation>存储键值对,完美匹配你需要的动态访问需求:

// 用record定义操作结构(C# 9及以上支持)
public record Operation(string Key, string Desc, string Response);

// 作为静态属性初始化,全局可访问
public static readonly Dictionary<string, Operation> Operations = new()
{
    ["a"] = new Operation("a", "Add", "+"),
    ["s"] = new Operation("s", "Subtract", "-"),
    ["m"] = new Operation("m", "Multiply", "*"),
    ["d"] = new Operation("d", "Divide", "/")
};

// 动态访问示例
string currentOp = "a";
string description = Operations[currentOp].Desc;

如果使用C# 8及以下版本,将record替换为普通类即可:

public class Operation
{
    public string Key { get; }
    public string Desc { get; }
    public string Response { get; }

    public Operation(string key, string desc, string response)
    {
        Key = key;
        Desc = desc;
        Response = response;
    }
}

方案2:自定义类+索引器(兼顾点语法与动态访问)

如果想保留类的使用形式,同时支持方括号动态访问,可以给自定义类添加索引器,还能同时保留点语法访问的便利性:

public class Operations
{
    private readonly Dictionary<string, Operation> _internalOps = new()
    {
        ["a"] = new Operation("a", "Add", "+"),
        ["s"] = new Operation("s", "Subtract", "-"),
        ["m"] = new Operation("m", "Multiply", "*"),
        ["d"] = new Operation("d", "Divide", "/")
    };

    // 自定义索引器,支持字符串键动态访问
    public Operation this[string key] => _internalOps[key];

    // 保留点语法访问的成员
    public Operation A => _internalOps["a"];
    public Operation S => _internalOps["s"];
    public Operation M => _internalOps["m"];
    public Operation D => _internalOps["d"];
}

// 使用示例
var ops = new Operations();
string currentOp = "a";
string dynamicDesc = ops[currentOp].Desc; // 动态访问
string directDesc = ops.A.Desc; // 点语法访问

关于ExpandoObject

ExpandoObject确实支持动态访问,但它依赖dynamic关键字,会失去C#的静态类型检查优势,而且初始化无法像字典那样简洁完成,对于你这种结构固定的静态数据场景,强类型字典的方案更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:24:18