通用类中的字典

时间:2016-02-28 11:34:44

标签: c#

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

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无法将类型'ConfigurationDictionary [GenericsTest,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]'隐式转换为'ConfigurationDictionary [GenericsTest,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]'

这条消息对我没有意义,因为它基本上说它无法将“typeA”转换为“typeA”。有人可以解释这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:7)

你已经影响了你的班级&#39; T模板参数,包含函数T模板参数。它们可能不一样。

如果你打算使用你的班级,可以给你的内心T另一个名字,如T2,或者可以全部放弃。{p> 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)
        {

        }
    }
}