我正在尝试为包含SQL查询结果的XML字符串创建解析器框架.目的是继承通用类,这些类使用列数据类型进行实例化.包含的代码适用于单列变体.将有两列的其他类,等等.
我需要能够指定泛型类型必须支持Parse(string)方法.我该怎么做呢?
abstract class OneColumnParser<Col1>
{
abstract string Column1;
List<Col1> ParseQueryResult(string queryResult)
{
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(queryResult);
List<Col1> results = new List<Col1>();
foreach (XmlNode xNode in xDoc.GetElementsByTagName(Column1))
{
results.Add(Col1.Parse(xNode.InnerText));
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译上面的内容时,我得到"'Col1'是'type参数',在results.Add()行的给定上下文中无效",因为我没有指定该类型必须支持该方法.但是怎么样?
一种方法是为您的Col1类型定义无参数构造函数和接口:
interface IParseable
{
void Parse(string text);
}
abstract class OneColumnParser<T> where T : IParseable, new
{
abstract string Column1;
List<T> ParseQueryResult<T>(string queryResult)
{
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(queryResult);
var results = new List<T>();
foreach (XmlNode xNode in xDoc.GetElementsByTagName(Column1))
{
var col = new T();
col.Parse(xNode.InnerText);
results.Add(col);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |