我正在寻找一种定义IDictionary<List<IInterface>, HashSet<IInterface>>
的方法,以便对于每个键值对,实现IInterface
的类型是相同的。
我们说我有两种类型T1
,T2
来实现IInterface
。
然后应该可以添加键值对
List<T1>
和HashSet<T1>
List<T2>
和HashSet<T2>
但是不应该添加类型的键值对
List<T1>
和HashSet<T2>
List<T2>
和HashSet<T1>
。是否可以定义这样的字典,以便每当我尝试添加禁用的键值对时都会出现编译错误?如果是,怎么样?
如果我需要一个或几个新的类,接口等,我不在乎。我只是想知道原则上是否可行。
答案 0 :(得分:3)
如果我需要一个或几个新的类,接口等,我不在乎。
那么在这种情况下,它几乎是可能的!您可以将非类型安全字典包装在仅提供类型安全访问的类中。
public class MyDictionary {
private readonly Dictionary<object, object> _innerDictionary = new Dictionary<object, object>();
public void Add<T>(List<T> key, HashSet<T> value) where T : IInterface {
_innerDictionary.Add(key, value);
}
public HashSet<T> Get<T>(List<T> key) where T : IInterface {
return (HashSet<T>)_innerDictionary[key];
}
public void Set<T>(List<T> key, HashSet<T> value) where T : IInterface {
_innerDictionary[key] = value;
}
// etc.
}
请注意,List<ConcreteImplementation>
无法转换为List<IInterface>
,无论ConcreteImplementation
是否实现IInterface
,因此您无法以这种方式实现IDictionary<List<IInterface>, HashSet<IInterface>>
接口。< / p>