Остановить цикл с помощью события клика jQuery

Вы можете использовать Reflection для этого: (из моей библиотеки - это получает имена и значения)

public static Dictionary DictionaryFromType(object atype)
{
    if (atype == null) return new Dictionary();
    Type t = atype.GetType();
    PropertyInfo[] props = t.GetProperties();
    Dictionary dict = new Dictionary();
    foreach (PropertyInfo prp in props)
    {
        object value = prp.GetValue(atype, new object[]{});
        dict.Add(prp.Name, value);
    }
    return dict;
}

Эта вещь не будет работать для свойств с индексом - для этого (она становится громоздкой ):

public static Dictionary DictionaryFromType(object atype, 
     Dictionary indexers)
{
    /* replace GetValue() call above with: */
    object value = prp.GetValue(atype, ((indexers.ContainsKey(prp.Name)?indexers[prp.Name]:new string[]{});
}

Кроме того, чтобы получить только общедоступные свойства: ( см. MSDN в BindingFlags enum )

/* replace */
PropertyInfo[] props = t.GetProperties();
/* with */
PropertyInfo[] props = t.GetProperties(BindingFlags.Public)

Это работает с анонимными типами, слишком! Чтобы просто получить имена:

public static string[] PropertiesFromType(object atype)
{
    if (atype == null) return new string[] {};
    Type t = atype.GetType();
    PropertyInfo[] props = t.GetProperties();
    List propNames = new List();
    foreach (PropertyInfo prp in props)
    {
        propNames.Add(prp.Name);
    }
    return propNames.ToArray();
}

И это примерно то же самое только для значений, или вы можете использовать:

GetDictionaryFromType().Keys
// or
GetDictionaryFromType().Values

Но это немного медленнее, я бы представьте себе.

0
задан user759235 12 July 2012 в 00:07
поделиться