泛型类中的字典

本文关键字:字典 泛型类 | 更新日期: 2023-09-27 18:36:31

我正在尝试使用以下代码实现通用类:

interface IBasicInput<T> where T : InputOutputConfig
{
    void Configure<T>(ConfigurationDictionary<T> conf) where T : InputOutputConfig;
}
public class ConfigurationDictionary<T> : Dictionary<string,T> where T : InputOutputConfig
{    
}
public abstract class InputOutputConfig
{   
}
public class SpecificInputConfig : InputOutputConfig
{
}    
public class GenericInput<T> : IBasicInput<T> where T : InputOutputConfig
{
    ConfigurationDictionary<T> configuration;
    public GenericInput()
    {
        configuration = null;
    }
    public void Configure<T>(ConfigurationDictionary<T> _conf) where T : InputOutputConfig
    {
        configuration = new ConfigurationDictionary<T>();
        foreach (KeyValuePair<string,T> kvp in _conf)
        {
        }
    }
}

问题是configuration = new ConfigurationDictionary<T>();会产生错误。

错误 CS0029 无法将类型"配置字典 [泛型测试,版本=1.0.0.0,区域性=中性,公钥令牌=空]

"隐式转换为"配置字典 [泛型测试,版本=1.0.0.0,区域性=中性,公钥令牌=空]"

这条消息对我来说没有意义,因为它基本上说它不能将"typeA"转换为"typeA"。有人可以解释一下这段代码有什么问题吗?

泛型类中的字典

你已经用你的函数T模板参数隐藏了类的T模板参数。它们可能不一样。

要么给你的内在T另一个名字,比如T2,或者如果你打算使用你的类T,可以把它全部放下:

public class GenericInput<T> : IBasicInput<T> where T : InputOutputConfig
{
    ConfigurationDictionary<T> configuration;
    public GenericInput()
    {
        configuration = null;
    }
    public void Configure<T2>(ConfigurationDictionary<T2> _conf) where T2 : InputOutputConfig
    {
        // in this line, you need the class template T, not the inner T2
        configuration = new ConfigurationDictionary<T>();
        foreach (KeyValuePair<string,T2> kvp in _conf)
        {
        }
    }
}