在 C# 中,如果只有索引号,如何获取索引属性的名称

本文关键字:索引 获取 属性 如果 何获取 | 更新日期: 2023-09-27 18:37:02

我有一个由json映射器函数(使用LitJson)创建的对象。它包含索引属性。

我可以循环访问属性并像这样获取每个属性值

for(int i = 0; i < jdata.Count;i++) {
    Console.WriteLine(jdata[i]);
} 

我想以字符串形式获取每个属性名称,而不是属性值。

我发现的最接近的东西是这个https://stackoverflow.com/questions/1011109/how-do-you-get-the-name-of-the-property

这在哪里工作

string name = ReflectionUtility.GetPropertyName((Sample2 s) => s.Foo);

但事实并非如此(似乎是因为它是索引属性?

string name = ReflectionUtility.GetPropertyName((Sample2 s) => s[0]);

在 C# 中,如果只有索引号,如何获取索引属性的名称

发现我必须先将 JsonData 强制转换为 IDictionary,然后才能访问 Keys 属性。

这样:

JsonData x = getMyData();//however you're getting your JsonData object
var keys = (x as IDictionary).Keys; // you should probably check for null 
foreach(string s in keys)
   Console.WriteLine("Another key: "+s);

我找到了源代码。看起来JsonData实现了 IDictionary,因此您应该能够访问 Keys 属性。

索引

器基本上是作为接受索引参数的函数实现的,因此无法使用反射来获取与给定索引关联的"名称"。