Вы можете создать метод, который будет рефлексивно создавать экземпляр свойства, учитывая массив имен PropertyInfos или строк свойств:
var properties = MyClass.GetType().GetProperties();
var values = new [] {"test1", "test55", ... };
for(var i=0; i<properties.Count; i++)
DoSomethingAndAssign(properties[i], values[i], MyClass);
public void DoSomethingAndAssign(PropertyInfo prop, string theValue, Object theClass)
{
var setValue = /*do anything you want based on theValue before setting*/
//will throw an exception if theClass is null, theClass doesn't have the property,
//or the property cannot be set to a value of setValue's type.
prop.SetValue(theClass, setValue, null);
}
Имейте в виду, что это будет намного медленнее, чем статическое присвоение значений, как это обычно делают рефлексивные алгоритмы. Он также будет компилироваться независимо от структуры MyClass, поэтому вам придется тщательно тестировать его во время выполнения.
Другой возможный метод, если ваш класс содержит много очень похожих свойств, - определить индексатор. Индексатор делает класс похожим на индексированную коллекцию, как массив или список. Впрочем, для преобразования значения в a, скорее всего, потребуется рефлексивный алгоритм или оператор switch. Гораздо более простой и изящный способ состоит в том, чтобы MyClass содержал словарь свойств, через которые вы хотите выполнить итерацию, и привязывал средства доступа к свойствам и индексатор к словарю.
Все это в основном либо скрывает список назначений свойств, либо реализует менее эффективный способ циклического выполнения назначений. Если у вас есть сотни свойств, это избавит вас от необходимости печатать, но я бы посмотрел на рефакторинг этого класса для уменьшения или сбора его свойств. Если у вас есть пять свойств, которые установлены во многих местах системы, я бы посмотрел, возможен ли класс, который знает, как инициализировать ваш класс.