Альтернативным ответом на ваш вопрос может быть следующий, скажем, у вас есть класс фильтров, подобный следующему
public class Filter
{
public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();
}
Это позволит вам иметь динамический набор фильтров, вы можете назначать новые свойствакак потребитель и повторять существующие.Кажется, это соответствует вашим текущим требованиям.
Что касается реального ответа, как указывалось в комментариях многих, если вы хотите итерировать свойств , то вам следует использовать их.В своем примере кода вы предоставили поля .
Так что ваш класс Filter
, вероятно, в конечном итоге будет выглядеть так (обратите внимание, что я думаю, что var1 ... var3 - самые ужасныеимена, которые вы можете использовать, поскольку я не могу представить, что они могут определить в конце):
public class Filter
{
public int Var1 { get; set; } = 1;
public int Var2 { get; set; } = 2;
public int Var3 { get; set; } = 3;
}
, и тогда вы можете получить что-то похожее на:
var filter = new Filter();
var filterType = filter.GetType();
var readableProperties = filterType.GetProperties().Where( p => p.GetGetMethod() != null );
foreach (var property in readableProperties)
{
var value = (int)property.GetValue( filter );
Console.WriteLine( $"{property.Name} = {value + 3}" );
}
Чтобы убедиться, что вы выбираете толькоте, которые вы на самом деле хотите, вы можете, конечно, проверить имя, если оно равно Var1, Var2, Var3 или соответствует выражению регулярного выражения, или все, что вы хотели думать;)
Пример кода здесь, вы можетенайдите в этом dotnetfiddle (хотя без автопринадлежностей и $)