在Java中,我可以使用通配符“?”指定泛型。可以创建像这样的 map :
Map<String, ?>

我正在使用C#,我需要一个Dictionary<String, SomeInterface<?>>(其中?可以是int,double,任何类型)。这在C#中可能吗?

编辑:

例子:

interface ISomeInterface<out T>{
 T Method();
 void methodII();
}

class ObjectI : ISomeInterface<int>{
    ...
}
class ObjectII : ISomeInterface<double>{
    ...
}
class ObjectIII : ISomeInterface<string>{
    ....
}

我正在尝试将此对象映射到Dictionary中,例如:
Dictionary<String, ISomeInterface<?>> _objs = new Dictionary<String, ISomeInterface<?>();

_objs.Add("Object1", new ObjectI());
_objs.Add("Object2", new ObjectII());
_objs.Add("Object3", new ObjectII());

foreach(var keyVal in _objs){
   Console.WriteLine(keyVal.Method());
}

使用Assembly和Activator.createInstance在运行时加载实现ISomeInterface的对象。在创建时,我不知道对象是否实现ISomeInterface<int>ISomeInterface<double>

很感谢任何形式的帮助。

最佳答案

不。

但是,如果您使用的是C#4,则可以将ISomeInterface设置为covariant,以便ISomeInterface<Anything>可转换为ISomeInterface<object>

如果ISomeInterface具有使用其类型参数的参数(而不是返回值)的参数的方法,则这将是完全不可能的,因为这将允许您传递任意对象作为参数。

编辑:在您的特定情况下,最好的解决方案是使IMyInterface<T>继承一个单独的非通用IMyInterface接口(interface),并将所有不涉及T的成员移至基本接口(interface)。
然后,您可以使用Dictionary<string, IMyInterface>,不会有任何麻烦。

10-04 13:14