我有一个场景,我有一个自定义映射类。
我希望能够同时创建新实例并为其声明数据,并实现类似于的语法:
public static HybridDictionary Names = new HybridDictionary()
{
{People.Dave, "Dave H."},
{People.Wendy, "Wendy R."}
}
等等。如何定义我的类来启用这种语法?
答案 0 :(得分:7)
您尝试实现的目标是Collection Initializer
您的HybridDictionary类需要实现IEnumerable<>并有一个像这样的Add方法:
public void Add(People p, string name)
{
....
}
然后你的实例应该有效。
注意:按照惯例,键应该是第一个参数后跟值(即void Add(字符串键,People值)。
答案 1 :(得分:4)
基本上,您应该实现ICollection< T>,但这里有一个更详细的解释:http://blogs.msdn.com/madst/archive/2006/10/10/What-is-a-collection_3F00_.aspx。
在文章中,Mads Torgersen解释说使用了基于模式的方法,因此唯一的要求是您需要使用具有正确参数的公共Add方法并实现IEnumerable。换句话说,此代码有效且有效:
using System.Collections;
using System.Collections.Generic;
class Test
{
static void Main()
{
var dictionary = new HybridDictionary<string, string>
{
{"key", "value"},
{"key2", "value2"}
};
}
}
public class HybridDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>
{
private readonly Dictionary<TKey, TValue> inner = new Dictionary<TKey, TValue>();
public void Add(TKey key, TValue value)
{
inner.Add(key, value);
}
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
return inner.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}