首页 > 解决方案 > 获取静态类的第 n 个属性“C#?

问题描述

这里有一个名为“获取类的第 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 个属性的值(在本例中为字节数组)?上面的问题没有解决我的问题。

标签: c#reflection

解决方案


最简单的方法是将数组封装在 KeyValuePair 的集合中。公开一个List<KeyValuePair<string, byte[]>>被调用的数组,并将您的数组添加到其中:

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

推荐阅读