如何指定C#泛型类型必须支持Parse(字符串)?

Uff*_*ffe 1 c# generics

我正在尝试为包含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()行的给定上下文中无效",因为我没有指定该类型必须支持该方法.但是怎么样?

Kev*_*sse 6

一种方法是为您的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)