2010-01-07 37 views

回答

7

你所想acheive是一個Collection Initializer

你HybridDictionary的類必須實現IEnumerable <>並有一個Add方法是這樣的:

public void Add(People p, string name) 
{ 
    .... 
} 

然後你的instanciation應該工作。

注:按照慣例,關鍵應該是第一個參數後面的值(即無效添加(字符串鍵,人們值)

+2

正確的編譯器查找一個名爲'添加()'與方法。一組匹配的參數 - 它需要類型實現IEnumerable或IEnumerable 。就像這樣簡單 – LBushkin 2010-01-07 19:10:24

+0

這裏只是一個額外的說明,但你不必實際做任何事情與IEnumerable的實現,你可以拋出或返回空值。 – MrUnleaded 2016-11-04 15:37:33

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(); 
    } 
} 
相關問題