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

如何在C#中以变量值作为另一变量的名称/访问器?

在C#中实现Perl式动态变量访问(无需反射)

C#作为静态类型语言,没有Perl那种直接通过字符串变量解引用另一个变量的语法,但不用反射的话,有两种简洁实用的替代方案,能满足你动态创建和访问变量的需求。

先回顾你给出的Perl示例:

$string = "unknown until runtime";
$TargetVariableName = "string";
print $$TargetVariableName; # 实际等同于print $string,注意双$符号
# 输出:unknown until runtime

方案1:使用Dictionary<string, object>模拟动态变量映射

这是最直接的实现方式,用字典的键对应变量名,值对应变量内容:

// 用字典存储所有需要动态访问的"变量"
var dynamicVars = new Dictionary<string, object>();
dynamicVars["string"] = "unknown until runtime";

string targetVariableName = "string";
// 通过字符串键直接访问对应的值
Console.WriteLine(dynamicVars[targetVariableName]);
// 输出:unknown until runtime

// 动态创建新"变量"也很简单
dynamicVars["numberValue"] = 123;
Console.WriteLine(dynamicVars["numberValue"]);

方案2:使用ExpandoObject结合dynamic(类对象风格)

如果需要像访问普通对象属性一样操作,同时支持动态键访问,可以用ExpandoObject:

dynamic dynamicObj = new ExpandoObject();
// 像普通对象属性一样赋值
dynamicObj.string = "unknown until runtime";

string targetVariableName = "string";
// 将ExpandoObject转为字典,通过键访问
var objDict = (IDictionary<string, object>)dynamicObj;
Console.WriteLine(objDict[targetVariableName]);
// 输出:unknown until runtime

// 动态添加新属性
dynamicObj.anotherProperty = "dynamic new value";
// 既可以用属性访问,也可以用字典键访问
Console.WriteLine(dynamicObj.anotherProperty);
Console.WriteLine(objDict["anotherProperty"]);

这两种方案都不需要依赖反射,代码简洁易读,且性能比反射更优,完全能实现你想要的动态变量创建和访问功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:32:12