关于BiDirection字典:Bidirectional 1 to 1 Dictionary in C#
我的双语词典是:
internal class BiDirectionContainer<T1, T2>
{
private readonly Dictionary<T1, T2> _forward = new Dictionary<T1, T2>();
private readonly Dictionary<T2, T1> _reverse = new Dictionary<T2, T1>();
internal T2 this[T1 key] => _forward[key];
internal T1 this[T2 key] => _reverse[key];
internal void Add(T1 element1, T2 element2)
{
_forward.Add(element1, element2);
_reverse.Add(element2, element1);
}
}
我想添加这样的元素:
BiDirectionContainer<string, int> container = new BiDirectionContainer<string, int>
{
{"111", 1},
{"222", 2},
{"333", 3},
}
但我不确定在IEnumerable
中使用BiDirectionContainer
是否正确?
如果是这样我该怎么回事?有没有其他方法可以实现这样的功能?
答案 0 :(得分:2)
最简单的可能是枚举前向(或后向,无论看起来更自然)字典的元素如下:
internal class BiDirectionContainer<T1, T2> : IEnumerable<KeyValuePair<T1, T2>>
{
private readonly Dictionary<T1, T2> _forward = new Dictionary<T1, T2>();
private readonly Dictionary<T2, T1> _reverse = new Dictionary<T2, T1>();
internal T2 this[T1 key] => _forward[key];
internal T1 this[T2 key] => _reverse[key];
IEnumerator<KeyValuePair<T1, T2>> IEnumerable<KeyValuePair<T1, T2>>.GetEnumerator()
{
return _forward.GetEnumerator();
}
public IEnumerator GetEnumerator()
{
return _forward.GetEnumerator();
}
internal void Add(T1 element1, T2 element2)
{
_forward.Add(element1, element2);
_reverse.Add(element2, element1);
}
}
顺便说一下:如果您只想使用集合初始化程序,那么C#语言规范要求您的类实现System.Collections.IEnumerable
并且也提供{{1适用于每个元素初始值设定项的方法(即基本数量和参数类型必须匹配)。编译器需要该接口,但在初始化集合时不调用Add
方法(仅限add方法)。这是必需的,因为集合初始值设定项应仅适用于实际上是集合的内容,而不仅仅是具有add方法的内容。 Therefore it is fine只是添加界面而不实际实现方法体(GetEnumerator
)