2017-02-06 3 views
0

私はphoneBookからBillの電話番号を取得したいと思います。辞書から特定のインデックスを取得

class PersonsName 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

// Dictionary Class, add contacts to phone book 
Dictionary<PersonsName, int> phoneBook = new Dictionary<PersonsName, int>() 
{ 
    {new PersonsName {FirstName = "Bill", LastName = "Gates" }, 5550100 }, 
    {new PersonsName {FirstName = "Mark", LastName = "Zuckerberg" }, 5551438 } 
}; 

キーが見つからないと、次のような例外が発生します。辞書をループせずに電話番号を取得するにはどうすればよいですか?

PersonsName personA = new PersonsName { FirstName = "Bill", LastName = "Gates" }; 
int billssNumber = phoneBook[personA]; //key not found 
+0

本当に必要な場合は、Equalsメソッドを上書きする必要があります。次に例を示します:http://stackoverflow.com/questions/634826/using-an-object-as-a-generic-dictionary-key – Jannik

+1

あなたは 'GetHashCode'と' Equals' **をオーバーライドしなければなりません。それを辞書のキーとして使用するための読み取り専用オブジェクトです。 – Enigmativity

+0

@Jannik - そのようなものは削除しないでください。それは、コメントの歴史を理解することが難しくなります。 – Enigmativity

答えて

2

あなたPersonsNameクラスのごGetHashCode()Equals()をオーバーライドする必要があります。このリンクはあなたに役立ちます:Use custom object as Dictionary Key

希望すると助かります!

+0

これらのメソッドをオーバーライドした後、特定の値を取得するにはどうすればよいですか? – DRockClimber

+0

あなたがそれを効果的に実装するならば、これをやりなおすことによってそれにアクセスすることができます: 'int billssNumber = phoneBook [personA];' – mindOfAi

+0

それはうまく動作します。 Equals()メソッドとGetHashCode()メソッドはバックグラウンドで実装されていますか?私はジェネリック医がそれらをそのように使用すると仮定しているので、それらを呼ぶことはなかった? – DRockClimber

関連する問題