Изменить тест на:
var firstInt32Property = property.PropertyType == typeof(int);
Это необходимо, поскольку свойство свойства свойства само по себе не является целым числом: это System.Type
объект, который (свободно) представляет, какой тип возвращает свойство-получатель / свойство-установщик. С другой стороны, , вызывая для свойства get для экземпляра содержащего типа, будет получено действительное целое число.
Вот способ использования LINQ вместо цикла foreach
:
var firstInt32Property = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.First(p => p.PropertyType == typeof(int));
(Это вызовет исключение, если такого свойства не существует.)
Чтобы получить значение свойства из экземпляра содержащего типа:
int value = (int)firstInt32Property.GetValue(myObj, null);
Это, конечно, потерпит неудачу, если «первое» свойство Int32
окажется индексатором или действительно, если оно просто не имеет геттера. Вы можете отфильтровать такие свойства в исходном запросе, если такие сценарии вероятны.
Также обратите внимание, что этот код имеет ограниченное использование, потому что идея «первого свойства класса, являющегося целым числом» немного подозрительна. С Type.GetProperties
:
Метод GetProperties
не
вернуть свойства в конкретном
порядок, такой как алфавитный или
порядок декларирования. Ваш код не должен
зависит от порядка, в котором
свойства возвращаются, потому что это
порядок меняется.