使用C#2.0中的值初始化Dictionary

时间:2013-07-19 06:00:38

标签: c# dictionary c#-2.0

在C#2.0中,我们可以用以下值初始化数组和列表:

int[] a = { 0, 1, 2, 3 };
int[,] b = { { 0, 1 }, { 1, 2 }, { 2, 3 } };
List<int> c = new List<int>(new int[] { 0, 1, 2, 3 });

我想对词典做同样的事情。我知道你可以在C#3.0之后轻松地做到这一点:

Dictionary<int, int> d = new Dictionary<int, int> { { 0, 1 }, { 1, 2 }, { 2, 3 } };

但它在C#2.0中不起作用。如果不使用Add或基于现有的集合,是否有解决方法?

1 个答案:

答案 0 :(得分:10)

  

但它在C#2.0中不起作用。如果没有使用添加或基于现有的集合,是否有任何解决方法?

没有。我能想到的最接近的是编写自己的DictionaryBuilder类型以使其更简单:

public class DictionaryBuilder<TKey, TValue>
{
    private Dictionary<TKey, TValue> dictionary
        = new Dictionary<TKey, TValue> dictionary();

    public DictionaryBuilder<TKey, TValue> Add(TKey key, TValue value)
    {
        if (dictionary == null)
        {
            throw new InvalidOperationException("Can't add after building");
        }
        dictionary.Add(key, value);
        return this;
    }

    public Dictionary<TKey, TValue> Build()
    {
        Dictionary<TKey, TValue> ret = dictionary;
        dictionary = null;
        return ret;
    }
}

然后你可以使用:

Dictionary<string, int> x = new DictionaryBuilder<string, int>()
    .Add("Foo", 10)
    .Add("Bar", 20)
    .Build();

这至少是一个单个表达式,这对于你想在声明点初始化的字段很有用。