2011-05-17 14 views
1
public class PeopleCollection : IEnumerable 
{ 
    private Dictionary<string, Person> listPeople = new Dictionary<string, Person>(); 

    // This indexer returns a person based on a string index. 
    public Person this[string name] 
    { 
     get { 
      return (Person)listPeople[name]; // **Is this cast necessary?** 
     } 
     set { 
      listPeople[name] = value; 
     } 
    } 
    .. 
} 

問題:我們是否應該將返回值從listPeople[name]轉換爲PersonC# - 我們應該投入索引器方法

謝謝

+0

它已在字典聲明中明確地轉換爲Person。 – canon 2011-05-17 16:23:55

回答

3

不,不需要。

public TValue this[TKey key] { get; set; } 

對於在listPeople領域Dictionary<string, Person>TValue被替換Person,所以分度器將返回參照Person對象:在Dictionary<TKey, TValue>作爲索引被聲明。

2

不,那個劇組沒有必要。 Dictionary's indexer已被強制輸入以返回Person(因爲那是TValue用於該字典)。這是泛型的好處之一:)

當然,找到這個最簡單的方法是刪除演員,看看 - 如果字典索引器沒有被強制類型,你的代碼將失敗編譯,因爲你一直試圖返回object(或其他)Person類型的索引器。

+0

剛剛獲得C#深度書!很高興看到你在這裏出現:) – q0987 2011-05-17 16:32:20

+0

@ q0987:優秀 - 希望你喜歡它:) – 2011-05-17 17:19:26

1

不,這是沒有必要的,但你會發現如果你刪除(人)並編譯它。

相關問題