Utworzenie słownika z pól klasy

0

Jest sobie klasa:

public class ItemInfoBase
{

        private string dataColumnName;
        private string dataColumnType;
        private string myColumnName;

        public static readonly ItemInfoBase Id = new ItemInfoBase("Id", "Int32", "Id");
        public static readonly ItemInfoBase CreationDate = new ItemInfoBase("CreationDate", "DateTime", "Data utworzenia");
        public static readonly ItemInfoBase Name = new ItemInfoBase("Name", "String", "Nazwa");
        //itd, okolo 30 pól


        private ItemInfoBase(string dataColumnName, string dataColumnType, string myColumnName)
        {
            this.dataColumnName = dataColumnName;
            this.dataColumnType = dataColumnType;
            this.myColumnName = myColumnName;
        }


        public string DataColumnName { get { return dataColumnName; } }
        public string DataColumnType { get { return dataColumnType; } }
        public string MyColumnName { get { return myColumnName; } }


}

I jest słownik:

public Dictionary<string, ItemInfoBase> ItemInfo = new Dictionary<string, ItemInfoBase>();

Mogę go zapełniać ręcznie w ten sposób

ItemInfo.Add("Id", ItemInfoBase.Id);
ItemInfo.Add("CreationDate", ItemInfoBase.CreationDate);

itd...
ale w jaki sposób utworzyć słownik automatycznie za pomocą for lub foreach
gdzie kluczem będzie string z DataColumnName a wartością klasa statyczna?

0

Edit, nie doczytałem.

Poczytaj o refleksji. Opereujesz na typie danej klasy iterujesz po jego polach, właściwościach.

0

Rozwiązałem problem:

            Dictionary<string, ItemInfoBase> ItemInfo = new Dictionary<string, ItemInfoBase>();
            Type type = typeof(ItemInfoBase);
            FieldInfo[] fields = type.GetFields();

            foreach (var field in fields)
            {
                ItemInfoBase value = (ItemInfoBase)type.GetField(field.Name).GetValue(null);
                ItemInfo.Add(value.MyColumnName, value);
            }

1 użytkowników online, w tym zalogowanych: 0, gości: 1