- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试为包含 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/
我是一名优秀的程序员,十分优秀!