获取静态类的第n个属性“;C#?

获取静态类的第n个属性“;C#?,c#,reflection,C#,Reflection,有一个问题叫做“获取类的第n个属性”,其中的答案对静态类不起作用 这是我的静态类: namespace MyNameSpace { static class MyStaticClass { public static byte[] BASIC_IFO = { 0xCC, 0x55, 0xD1, 0x00, 0x00, 0x00 }; public static byte[] DEFINITION = { 0xCC, 0x55, 0xD2, 0x00

有一个问题叫做“获取类的第n个属性”,其中的答案对静态类不起作用

这是我的静态类:

namespace MyNameSpace
{
    static class MyStaticClass
    {
        public static byte[] BASIC_IFO = { 0xCC, 0x55, 0xD1, 0x00, 0x00, 0x00 };
        public static byte[] DEFINITION = { 0xCC, 0x55, 0xD2, 0x00, 0x00, 0x00 };
        public static byte[] GET_PARAMETERS = { 0xFF, 0x55, 0xD3, 0x00, 0x00, 0x00 };
    }
}

如何从主类访问该静态类的第n个属性值(在本例中为字节数组)?上面的问题并没有解决我的问题。

我认为最简单的方法是使用属性而不是字段,这样您就可以使用
GetProperties
方法将所有属性作为PropertyInfo对象的数组来获取

因此,使用属性,这就是如何轻松解决问题的方法

static class MyStaticClass
{
    public static byte[] BASIC_IFO { get; set; } = { 0xCC, 0x55, 0xD1, 0x00, 0x00, 0x00 };
    public static byte[] DEFINITION { get; set; } = { 0xCC, 0x55, 0xD2, 0x00, 0x00, 0x00 };
    public static byte[] GET_PARAMETERS { get; set; } = { 0xFF, 0x55, 0xD3, 0x00, 0x00, 0x00 };
}
现在您可以像这样访问第n个属性

int n = 2; // your n
PropertyInfo prop = typeof(MyStaticClass).GetProperties()[n];

byte[] nthPropertyValue = prop.GetValue(null) as byte[];

最简单的方法是将数组封装在KeyValuePair集合中。公开名为数组的
列表
,并将您的数组添加到其中:

namespace MyNameSpace
{
    static class MyStaticClass
    {
        public static readonly List<KeyValuePair<string, byte[]>> Arrays = new List<KeyValuePair<string, byte[]>>();

        static MyStaticClass()
        {
            Arrays.Add(new KeyValuePair("BASIC_IFO", new byte[] { 0xCC, 0x55, ... }));
        }
    }
}
。。。像这样搜索:

var BASIC_IFO = MyStaticClass.Arrays[0].Value;
var BASIC_IFO = MyStaticClass.Arrays.FirstOrDefault(kvp => kvp.Key == "BASIC_IFO").Value;
。。。或者把它放到字典里:

var dictArrays = MyStaticClass.Arrays.ToDictionary(p => p.Key, p => p.Value);
var val = dictArrays["BASIC_IFO"][1]; // == 0x55
var val = Arrays[0].Value[1]; // == 0x55

你能展示你试过的代码吗?你说的“第n个属性”是什么意思?我指的是从上到下一行的第n个属性。在我的例子中,第一个是基本IFO,最后一个是GET参数。。事情的顺序似乎很脆弱。链接问题中的答案不起作用,不是因为静态类(除了绑定标志),而是因为您公开了字段而不是属性。转换为属性或使用GetFields。。。但是,我仍然不建议在Arrays.Add(newkeyvaluepair(“BASIC_IFO”,newbyte[]{0xCC,0x55}))中出现错误;它表示名称数组在当前上下文中不存在。这不是紧跟在珍贵的一行之后,它们都在静态类中吗?上面的代码是基于Nappin的。。。请不要只是复制和粘贴它,花时间去理解它。要添加的调用需要在方法中。您能举个例子吗?Add是一种我感到困惑的方法。请参阅更新的答案。IMO反射不应用作访问数据的默认方式。。。如果你需要一个集合,公开一个集合。@monkey这就是我的boi想要的