Вы могли бы сделать что-то подобное.
Это менее многословно? На самом деле, нет. Преимущество, которое я бы сказал, заключается в рефакторинге функциональности в самом классе, что может или не может быть желательным.
Я отредактировал имена свойств и рассчитал для краткости.
public class Headers
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public IEnumerable<string> GetPropertyValues()
{
yield return A;
yield return B;
yield return C;
}
}
Я мог бы сделать это код менее многословный и «не требующий обслуживания» с помощью рефлексии, но я лично не согласился бы с компромиссом в производительности.
Но если вы хотите использовать рефлексию, это работает:
public class Headers
{
//You can modify this to get certain properties if you want, like public only
private static readonly PropertyInfo[] properties = typeof(Headers).GetProperties();
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public IEnumerable<string> GetPropertyValues()
{
foreach (var prop in properties)
yield return prop.GetValue(this)?.ToString();
}
}
У других подходов к отражению есть небольшое преимущество, заключающееся в кэшировании массива PropertyInfo
. Но опять же размышление медленное.