Удаление свойств из PropertyInfo [] - PullRequest
0 голосов
/ 01 апреля 2011

Какой самый простой способ удалить первые четыре свойства из «свойств». Где свойства - это коллекция PropertyInfo, как показано ниже.

PropertyInfo[] properties = GetAllPropertyForClass(className);

public static PropertyInfo[] GetAllPropertyForClass(string className) {
    Type[] _Type = Assembly.GetAssembly(typeof(MyAdapter)).GetTypes();

    return _Type.SingleOrDefault(
                t => t.Name == className).GetProperties(BindingFlags.Public |
                BindingFlags.NonPublic |
                BindingFlags.Instance |
                BindingFlags.DeclaredOnly);   
}

Конечно, я могу выполнить цикл и построить еще одну коллекцию PropertyInfo [], игнорируя свойство на основе его индекса или имени. Но я хочу знать, есть ли способ достичь без циклического перебора свойств.

Спасибо

Ответы [ 2 ]

6 голосов
/ 01 апреля 2011

LINQ помогает:

PropertyInfo[] almostAllProperties = properties.Skip(4).ToArray();

Это работает для всех видов IEnumerables, не только для массивов PropertyInfo.


EDIT : как указывали другиевыход, исключая свойства по имени, является более надежным.Вот как бы вы сделали это с помощью LINQ:

PropertyInfo[] almostAllProperties = properties.Where(
    p => p.Name != "ExcludeProperty1"
        && p.Name != "ExcludeProperty2"
        && p.Name != "ExcludeProperty3").ToArray();
1 голос
/ 01 апреля 2011
PropertyInfo[] filteredProperties = new PropertyInfo[properties.Length - 4];

for( int i = 4, x = 0; i < properties.Length; i++, x++ )
{
    filteredProperties[x] = properties[i];
}

Это, вероятно, самый дешевый способ с точки зрения тактов, хотя ничего особенного.

Если это не просто тестовый код, вы никогда не должны рассчитывать на то, что первые четыре свойства одинаковы. Отражение не гарантирует последовательность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...