2014-09-22 16 views
0

Итак, я пытаюсь получить список свойств, сгенерированных из ресурса Strings.resx. A Строки класс автогенерируется из этого, и я просто пытаюсь получить список этих имен свойств. Ниже приведен пример кода, который не работает.Type.GetProperties() не работает

// 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(); 

Так что же дает? Класс, который пытается получить доступ Строки находится в одной и той же сборке, поэтому я не думаю, что это проблема.

Предлагает фрагмент из автогенератора Строки Класс.

/// <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 ... 
    //------------------ 
} 
+1

Хорошо, если все ваши статические свойства являются «внутренними», вполне естественно, что 'BindingFlags.Public' не возвращает их. – hvd

+0

Оформить заказ документации, очевидно, что вы делаете неправильно http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags(v=vs.110).aspx – MethodMan

+1

'BindingFlags.NonPublic'? –

ответ

1

Вам не хватает NonPublic флаг. Конечно, вам нужен флаг Static, так как есть static.

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

Ugh ... хорошее горе. Вот и все. – Ultratrunks