如何解决警告:TKey与外部类型的类型参数同名

时间:2013-06-07 18:56:13

标签: c# generics

我正在尝试解决编译器警告:

Type parameter 'TKey' has the same name as the type parameter from outer type 'Common.Core.ObservableDictionary<TKey,TValue>' 

这是有问题的代码:

protected class KeyedDictionaryEntryCollection<TKey> : KeyedCollection<TKey, DictionaryEntry> {

        public KeyedDictionaryEntryCollection() {}

        public KeyedDictionaryEntryCollection(IEqualityComparer<TKey> comparer) : base(comparer) {}

        protected override TKey GetKeyForItem(DictionaryEntry entry) {
            return (TKey) entry.Key;
        }
    }

它显示了第一个TKey。

我该如何解决这个问题?代码工作正常,但我正在努力解决所有编译器警告。

1 个答案:

答案 0 :(得分:9)

这是因为这是泛型类中的内部类。编译器警告您使用与外部类规范相同的名称,这有效地“隐藏”了它。您可以通过消除内部类的规范来删除它,因为它不需要(除非您想引入新的泛型类型):

class ObservableDictionary<TKey,TValue>
{
     // This class already knows about TKey and TValue since it's an inner class in the "outer" generic class
     protected class KeyedDictionaryEntryCollection : KeyedCollection<TKey, DictionaryEntry> 
     {
        // Your existing code, as is...
     }
}