Я пишу консольное приложение, чтобы упростить управление локальным экземпляром SSRS, используя библиотеки ReportExecution2005 и ReportService2010 , каждая из которых предоставляет различные функции.Для работы с существующими отчетами мне нужно прочитать строки XML из базы данных ReportServer, которая содержит параметры отчетов, проанализировать их и использовать эту информацию для построения объектов, используемых при взаимодействии с сервером.Для этого я написал простую функцию, показанную ниже
public static ParameterValue[] RebuildParameters(string parameters) {
//setup xml
XDocument main = XDocument.Parse(parameters);
List<XElement> pElements = main.Descendants("ParameterValue").ToList();
//rebuild param list
ParameterValue[] newParams = new ParameterValue[pElements.Count];
int i = 0;
foreach (XElement param in pElements) {
newParams[i] = new ParameterValue();
newParams[i].Name = param.Element("Name").Value.ToString();
newParams[i].Value = param.Element("Value").Value.ToString();
i++;
}
return newParams;
}
Все шло хорошо, пока мне не понадобилось использовать эту вспомогательную функцию для двух отдельных пространств имен.Класс ParameterValue существует в обоих пространствах имен ( Здесь и Здесь ), но я не могу явно привести их между собой.Я попытался также настроить универсальную функцию, но я не могу назначить имя или значение, так как тип неизвестен.
public static T[] RebuildParameters<T>(string parameters) where T : new() {
//setup xml
XDocument main = XDocument.Parse(parameters);
List<XElement> pElements = main.Descendants("ParameterValue").ToList();
//rebuild param list
T[] newParams = new T[pElements.Count];
foreach (XElement param in pElements) {
newParams[i] = new T();
//not allowed
newParams[i].Name = param.Element("Name").Value.ToString();
newParams[i].Value = param.Element("Value").Value.ToString();
}
return newParams;
}
Каков наилучший способ написания одного вспомогательного метода, который может использоваться обоими классами из разных пространств имен, зная, что код будет идентичен?