Чтобы начать рефакторинг, могу ли я предложить:
TestPassesBuilder.AppendFormat(
"<tr valign='top'><td><b>Subject</b></td><td>{0}</td></tr>",
MultipleTestPasses[i]["HasMultipleDataSet"][j]["subject"]
);
или
TestPassesBuilder.AppendFormat(
"<tr valign='top'><td><b>{0}</b></td><td>{1}</td></tr>",
"Subject",
MultipleTestPasses[i]["HasMultipleDataSet"][j]["subject"]
);
Где TestPassesBuilder
- это, конечно, StringBuilder, а MultipleTestPasses
был преобразован для использования соответствующих универсальных типов коллекций, а не мерзости ArrayList / HashTable. Второй вариант также позволит в какой-то момент заголовок для каждой строки быть разложен в переменную.
Для следующего шага MultipleTestPasses должен быть преобразован в реальный объект. Поскольку похоже, что он использует жестко закодированные ключи, каждый «ключ» действительно соответствует свойству класса.