我正在编写一个控制台应用程序,以便使用各自提供不同功能的ReportExecution2005和ReportService2010库更轻松地管理本地 SSRS 实例。为了处理现有的报告,我必须从包含报告参数的 ReportServer 数据库读取 XML 字符串,解析它们,并使用这些信息来构建与服务器通信时使用的对象。为此,我编写了一个简单的函数,如下所示
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 类存在于两个命名空间(Here和Here)中,但我无法在它们之间进行显式转换。我也试过设置一个通用函数,但由于类型未知,我无法分配名称或值。
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;
}
编写一个可以由来自不同命名空间的两个类使用的单个帮助方法的最佳方法是什么,知道代码将是相同的?
相关分类