我有一個場景,我有一個自定義映射類。如何使用內聯初始化爲自定義地圖類實現構造函數?
我希望能夠創建新實例,並在同一時間宣佈了其數據並實現類似的語法:
public static HybridDictionary Names = new HybridDictionary()
{
{People.Dave, "Dave H."},
{People.Wendy, "Wendy R."}
}
等。我如何定義我的類來啓用這種語法?
我有一個場景,我有一個自定義映射類。如何使用內聯初始化爲自定義地圖類實現構造函數?
我希望能夠創建新實例,並在同一時間宣佈了其數據並實現類似的語法:
public static HybridDictionary Names = new HybridDictionary()
{
{People.Dave, "Dave H."},
{People.Wendy, "Wendy R."}
}
等。我如何定義我的類來啓用這種語法?
你所想acheive是一個Collection Initializer
你HybridDictionary的類必須實現IEnumerable <>並有一個Add方法是這樣的:
public void Add(People p, string name)
{
....
}
然後你的instanciation應該工作。
注:按照慣例,關鍵應該是第一個參數後面的值(即無效添加(字符串鍵,人們值)
基本上,你應該實現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();
}
}
正確的編譯器查找一個名爲'添加()'與方法。一組匹配的參數 - 它需要類型實現IEnumerable或IEnumerable。就像這樣簡單 –
LBushkin
2010-01-07 19:10:24
這裏只是一個額外的說明,但你不必實際做任何事情與IEnumerable的實現,你可以拋出或返回空值。 – MrUnleaded 2016-11-04 15:37:33