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

如何在C#中利用数值变量访问对象的数字命名属性?

在C#中通过数值变量访问对象的数字命名成员

嘿,我来帮你搞定这个问题!在C#里要通过数值变量(比如你的int number = 3)访问对象里像object.something.3这种数字命名的成员,得根据你的对象类型来选合适的方法,下面是几种常用的解决方案:

1. 如果对象是动态类型(比如ExpandoObject)

如果你的something是用dynamic声明的或者是ExpandoObject,那它本质上实现了IDictionary<string, object>接口,我们可以把它转成字典来通过字符串形式的数字键访问:

// 假设你的大型对象是动态类型
dynamic myObject = ...;
int number = 3;

// 将something转换为字典类型
var somethingDict = (IDictionary<string, object>)myObject.something;
// 把数字转成字符串作为键,获取对应的值
var targetValue = somethingDict[number.ToString()];

2. 如果对象是静态类型(反射方案)

如果你的对象是静态定义的类型(虽然C#里常规属性不能以数字开头,但可能是通过反射生成的类型、COM对象或者第三方库返回的特殊类型),那我们可以用反射来获取目标成员的值:

// 假设你的大型对象是静态类型,比如MyLargeObject myObject = ...;
int number = 3;

// 第一步:获取something属性的值
var somethingProperty = myObject.GetType().GetProperty("something");
var somethingValue = somethingProperty.GetValue(myObject);

// 第二步:获取数字命名的属性(属性名是字符串形式的数字)
var targetProperty = somethingValue.GetType().GetProperty(number.ToString());
var targetValue = targetProperty.GetValue(somethingValue);

3. 如果something本身是字典类型

如果something直接就是Dictionary<string, object>或者类似的字典结构,那操作就更简单了,直接把数字转成字符串作为键来访问:

// 假设something是Dictionary<string, object>类型
Dictionary<string, object> something = ...;
int number = 3;

var targetValue = something[number.ToString()];

小提示

  • 记得处理可能的异常,比如键不存在的情况,可以用TryGetValue方法来避免报错
  • 如果是频繁访问这类成员,反射的性能会稍差,建议提前缓存反射得到的PropertyInfo对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:46:42