2010-11-01 48 views
3

我想要一个字典,其中的值是通用对象,并且对于字典中的每个值不会相同。如何做到这一点,我觉得我缺少一些简单的东西。具有值作为通用参考接口的值的泛型字典

EG


    public interface IMyMainInterface 
    { 
     Dictionary<string, IMyInterface<T>> Parameters { get; } 
    } 

    public interface IMyInterface<T> 
    { 
     T Value 
     { 
      get; 
      set; 
     } 

     void SomeFunction(); 
    } 

Result: 
dic.Add("key1", new MyVal<string>()); 
dic.Add("key2", new MyVal<int>()); 

回答

8

你不能这样做,因为TIMyMainInterface没有意义。如果你的目标是让每个值是一些IMyInterface<T>的实现,但每个值可能是不同的T的实现,那么你或许应该声明一个基本接口:

public interface IMyInterface 
{ 
    void SomeFunction(); 
} 

public interface IMyInterface<T> : IMyInterface 
{ 
    T Value { get; set; } 
} 

则:

public interface IMyMainInterface 
{ 
    Dictionary<string, IMyInterface> Parameters { get; } 
} 

编辑:鉴于您更新的问题,它看起来像这就是你想要做的。如果你想知道为什么你必须这样做,想想你将如何尝试使用字典中的值,如果你能够使用你的原代码。试想一下:

var pair = dictionary.First(); 
var value = pair.Value; 

什么键入可以value被推断为?


但是,如果每个值应该是相同T的,那么你只需要让你的其他接口通用了。为了更清楚,我已经改名为类型参数,以保持TS分离:

public interface IMyMainInterface<TFoo> 
{ 
    Dictionary<string, IMyInterface<TFoo>> Parameters { get; } 
} 
+0

如果我走这条路,到了从字典我将不得不将它转换为拉动型的价值。即MyDict [“key”]。Value.Value(Yes bad术语) – Sytone 2010-11-01 16:06:24

+0

@Sytone:是的。无论如何,这是绝对必要的 - 因为否则,您可以尝试将“key2”的值作为字符串而不是int来提取......编译器如何知道您想要什么? – 2010-11-01 16:07:19