2014-09-25 11 views
-3

У меня есть класс, где я определяю одну константу из другого класса, будет читать эти константы или содержимое атрибутов и свойств класса. Что-то вроде чтения метаданных этого класса. что-то вроде этого:Как читать атрибуты класса с помощью C#?

namespace Ventanas._01Generales 
{ 
class Gral_Constantes 
{ 
    public class Cat_Productos 
    { 
     public const String Tabla_Productos = "Cat_Productos"; 
     public const String Campo_Producto_ID = "Producto_ID"; 
    } 
    public class Cat_Grupos_Productos 
    { 
     public const String Tabla_Grupos_Productos = "Cat_Grupos_Productos"; 
     public const String Campo_Grupo_Producto_ID = "Grupo_Producto_ID"; 
    } 

} 
} 

в другом классе, например, некоторые, как этот

namespace Ventanas._01Generales 
{ 
class Pinta_Ventana 
{ 
    public void Crea_Insert() 
    { 
    foreach(Properties p in Cat_Producto.Properties) 
    { 
     miControl.Text = p.value; //show "Cat_Grupos_Productos" 
     miControl.Name = p.value; //show Tabla_Grupos_Productos 
    } 
    } 

} 
} 
+0

Это не свойство. Продолжайте пытаться, это следующий, который вы подумаете. –

+0

И что не так с использованием списка или словаря или чего-то подобного? –

ответ

1

Вам необходимо Type.GetProperties (MSDN) Этот код будет работать:

foreach (PropertyInfo p in typeof(Cat_Producto).GetProperties()) 
{ 
    ... 
} 

Теперь несколько предостережений:

  1. Вы используете отражение, что очень медленно, и тот факт, что вы используете его, указывает на то, что вы, вероятно, делаете что-то ужасно неправильно.

  2. Если вы выдаете то, как работает код примера, будет отображаться только информация последнего свойства, поскольку вы никогда не позволяете обновлять пользовательский интерфейс.

  3. Ваш код на самом деле не имеет свойств, у них есть константные поля, поэтому этот код не будет возвращать ни один из них. Сделайте их свойствами для работы этого метода. Вы можете использовать Type.GetFields, если хотите версию полей.

+0

Помог ли downvoter прокомментировать? – BradleyDotNET

+0

Возможно, нисходящий не видел точки # 3 –

+1

@MichaelPetch Возможно. Я заметил это после моего первоначального сообщения и отредактировал его. Конечно, было бы неплохо, если бы они сказали мне, что в дополнение к downvoting, поэтому я могу исправить это ... О, хорошо. – BradleyDotNET

1

Похоже, вы хотите использовать пространство имен System.Reflection. Если вы заинтересованы в получении имен открытых константных строк, вам нужно будет использовать MemberInfo. Вам должно быть начато:

MemberInfo[] members = typeof(MyClass).GetMembers(); 

     foreach(MemberInfo m in members) 
     { 
      //do something with m.Name 
      Console.WriteLine(m.Name); 
     } 
+1

Это принесет вам гораздо больше, чем просто эти строки ... Это еще один жизнеспособный вариант, если вы при необходимости фильтруете методы/свойства. – BradleyDotNET

Смежные вопросы