使用反射获取嵌套在结构体中的结构体。

3
我遇到了访问嵌套结构体的问题。
namespace Some.NameSpace.ToAccess
{
    public struct HowTo
    {
        public const string Some_Static_Strings = "redudantString";
        public const string SomeOtherStatic_Strings = "someOtherRedundantString";
        public const string Option3 = SomeOption";

        public struct AccessMe
        {
            public static readonly string OPTION1 = 1.ToString;
            public static readonly string OPTION2 = 2.ToString;
            public static readonly string OPTION3 = 4.ToString;
            public static readonly string OPTION0 = 0.ToString;

            static AccessMe()
            {
            }
        }
    }
}

我看过其他类似的问题,但我的问题不同之处在于我在运行时加载程序集,而不仅仅是使用反射在运行时获取特定结构体的内容。因此,我在运行时之前没有对我要迭代的库的引用。

这与我的问题非常相似Get struct within struct using reflection,但我不能这样做

FieldInfo FI = typeof(HowTo).GetType().GetField("Collection", BindingFlags.Public | BindingFlags.Instance);

因为我需要先获取类型,但这也不起作用。

var result = _someClass.PreLoadedAssembly.GetType("Some.NameSpace.ToAccess.HowTo").GetField("AccessMe", BindingFlags.Public | BindingFlags.Instance);
< p >(PreLoadedAssembly是我在运行时加载并存储在_someClass中的程序集)< / p > < p >如果您能提供帮助,那将不胜感激,因为我没有取得太大进展。 谢谢< / p >

4
嵌套结构体不是字段,它是一种类型。 - Ondrej Tucny
正如@Ondrej所指出的,它的类型是..... - dipak
1个回答

2
你应该使用 GetNestedType 方法:
_someClass.PreLoadedAssembly
          .GetType("Some.NameSpace.ToAccess.HowTo")
          .GetNestedType("AccessMe");

1
更好的匹配可能是.GetNestedType("AccessMe") - Luaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接