2016-02-28 86 views
2

我尝试使用下面的代码来实现泛型类:字典中的泛型类

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) 
     { 

     } 
    } 
} 

的isssue是configuration = new ConfigurationDictionary<T>();产生错误。

错误CS0029无法隐式转换类型 'ConfigurationDictionary [GenericsTest,版本= 1.0.0.0,文化=中立,公钥=空]' 到“ConfigurationDictionary [GenericsTest,版本= 1.0.0.0,文化=中立,公钥= null]'

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

+0

你的问题,是因为你有两个通用的类型参数称为' T'在你的'Configure'方法的范围内 – jamespconnor

回答

7

您已使用您的函数T模板参数将您的班级'T模板参数遮蔽起来。他们可能不一样。

要么给你的内心像TT2也许另一名产品总数下降,如果你想用你的类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) 
     { 

     } 
    } 
}