2009-06-08 2 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 
    } 
} 
선언
관련 문제