Type.GetProperties()不起作用

本文关键字:不起作用 GetProperties Type | 更新日期: 2023-09-27 18:24:01

所以我试图检索从Strings.resx资源生成的属性列表。一个Strings类是从中自动生成的,我只是想获得这些属性名称的列表。下面是一些不起作用的示例代码。

// Well this works, so I know there is a property there.
var clearly_a_property = Strings.home_cancel;
// Yet none of this works
var nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.Public | 
    System.Reflection.BindingFlags.Static | 
    System.Reflection.BindingFlags.FlattenHierarchy);
nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.Public | 
    System.Reflection.BindingFlags.Instance | 
    System.Reflection.BindingFlags.FlattenHierarchy);
nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.Public | 
    System.Reflection.BindingFlags.Static);
nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.Public);
nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.FlattenHierarchy);
nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.Static);
nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.Instance);
nothing = typeof(Strings).GetProperties(System.Reflection.BindingFlags.DeclaredOnly);
nothing = typeof(Strings).GetProperties();

那是什么呢?试图访问Strings的类在同一个程序集中,所以我认为这不是问题所在。

以下是自动生成的Strings类中的一个片段。

/// <summary>
///   A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Strings {
    //------------------
    // other stuff ...
    //------------------
    internal static string home_cancel {
        get {
            return ResourceManager.GetString("home_cancel", resourceCulture);
        }
    }
    //------------------
    // other stuff ...
    //------------------
}

Type.GetProperties()不起作用

您缺少NonPublic标志。当然,您也需要Static标志,因为属性是static

var something = typeof(Strings).GetProperties(BindingFlags.NonPublic | BindingFlags.Static);