2009-06-08 11 views
2

基本的には辞書をラップするカスタムクラスを作成したいと思います。カスタムタイプのクラスを作成したい辞書<int, T>

Nameという名前のプロパティを追加したいとします。

私が試した:

public class MyDictionary<int, T> : Dictionary<int, T> 
{ 
     public string Name { get; set;} 

} 

は、任意のアイデアを働いているように見えませんか?

更新

私は取得していますエラーは次のとおりです。

Type parameter declaration must be an identifier not a type 
+0

具体的には何が問題になりませんか? –

+0

どうやって使用していますか? –

答えて

30
public class MyDictionary<T> : Dictionary<int, T> 
{ 
    public string Name { get; set; } 
} 
+2

@downvoter:この回答の問題点は何ですか? –

1

これは、私は思いますよ。あなたは、辞書をラップすることができた場合は

public class IntDict<T> : IDictionary<int, T> 
    { 
     private Dictionary<int,T> internalDict = new Dictionary<int,T>(); 

     //Sorry forgot this :P 
     public String Name { get; set; } 

     public void Add(int key, T value) 
     { 
      internalDict.Add(key,value); 
     } 

     public bool ContainsKey(int key) 
     { 
      return internalDict.ContainsKey(key); 
     } 

     public ICollection<int> Keys 
     { 
      get { return internalDict.Keys; } 
     } 

     public bool Remove(int key) 
     { 
      return internalDict.Remove(key); 
     } 

     public bool TryGetValue(int key, out T value) 
     { 
      return internalDict.TryGetValue(key, out value); 
     } 

     public ICollection<T> Values 
     { 
      get { return internalDict.Values; } 
     } 

     public T this[int key] 
     { 
      get 
      { 
       return internalDict[key]; 
      } 
      set 
      { 
       internalDict[key] = value; 
      } 
     }  


     #region ICollection<KeyValuePair<int,T>> Members 

     public void Add(KeyValuePair<int, T> item) 
     { 
      internalDict.Add(item.Key, item.Value); 
     } 

     public void Clear() 
     { 
      internalDict.Clear(); 
     } 

     public bool Contains(KeyValuePair<int, T> item) 
     { 
      return (internalDict.ContainsKey(item.Key) && internalDict.ContainsValue(item.Value)); 
     } 

     private void CopyTo(KeyValuePair<int, T>[] array, int arrayIndex) 
     { 
      //Could be done but you prolly could figure this out yourself; 
      throw new Exception("do not use"); 
     } 

     public int Count 
     { 
      get { return internalDict.Count; } 
     }  

     private bool IsReadOnly 
     { 
      get { return false; } 
     } 

     public bool Remove(KeyValuePair<int, T> item) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 

     #region IEnumerable<KeyValuePair<int,T>> Members 

     public IEnumerator<KeyValuePair<int, T>> GetEnumerator() 
     {  
      return internalDict.GetEnumerator(); 
     } 

     #endregion 

     #region IEnumerable Members 

     System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
     { 
      return internalDict.GetEnumerator(); 
     } 

     #endregion 
    } 
0

なぜ、この:

public class Context<T> 
{ 
    private Dictionary<int, T> dictContext; 
    public String Name { get; private set; } 

    public Context (String name) 
    { 
     this.Name = name; 
     dictContext = new Dictionary<int, T>(); 
    } 

そして、あなたはすべての辞書のメンバーを追加することができます

public int Count { 
     get { return dictContext.Count(); } 
    } 
    public Dictionary<int, T>.KeyCollection Keys 
    { 
     get { return dictContext.Keys; } 
    } 
    public Dictionary<int, T>.ValueCollection Values 
    { 
     get { return dictContext.Values; } 
    } 


    public void Add (int key, T value) 
    { 
     dictContext.Add(key, value); 
    } 

    public bool Remove (int key) 
    { 
     return dictContext.Remove(key); 
    } 

をし、あなた自身の

public void MyFunction() 
    { 
     //do nothing 
    } 
} 
を宣言
関連する問題