gpt4 book ai didi

c# - 如何指定 C# 泛型类型必须支持 Parse(string)?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:20 25 4
gpt4 key购买 nike

我正在尝试为包含 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));
}
}
}

当我编译上面的代码时,我在 results.Add() 行得到“‘Col1’是一个‘类型参数’,它在给定的上下文中无效”,因为我没有指定类型必须支持方法。但是如何呢?

最佳答案

一种方法是为您的 Col1 类型定义无参数构造函数和接口(interface):

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);
}
}
}

关于c# - 如何指定 C# 泛型类型必须支持 Parse(string)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12338968/

25 4 0
文章推荐: css - 显示特定的 Tick 值
文章推荐: ruby-on-rails - 无法在 ruby​​ 中转储匿名类类
文章推荐: python - 使用 python http.client 访问 korbit api
文章推荐: python - 如何提取下的所有源代码并导出为html?