2013-12-19 95 views
-1

我想要做的是獲取給定哈希表中的對象的值,這要歸功於它的關鍵。 這裏是我的代碼:在散列表中,如何通過鍵獲取對象值?

Hashtable quotidiani = new Hashtable(); 

Giornale corriere = new Giornale(); 
corriere.nome("Corriere della Sera"); 
corriere.direttore("Ferruccio de Bortoli"); 
corriere.anno("1876"); 
quotidiani.Add("corriere", corriere); 

Giornale repubblica = new Giornale(); 
repubblica.nome("la Repubblica"); 
repubblica.direttore("Ezio Mauro"); 
repubblica.anno("1976"); 
quotidiani.Add("repubblica", repubblica); 

Giornale ilFatto = new Giornale(); 
ilFatto.nome("Il Fatto Quotidiano"); 
ilFatto.direttore("Antonio Padellaro"); 
ilFatto.anno("2009"); 
quotidiani.Add("ilfatto", ilFatto); 

/*IDictionaryEnumerator enumeratore = quotidiani.GetEnumerator(); 

Console.WriteLine("Di quale quotidiano vuoi visionare le informazioni? (scrivi la chiave): "); 
string answer = Console.ReadLine(); 
while (enumeratore.MoveNext()) { 

    if (quotidiani.ContainsKey(answer)) 
{ 
    Giornale grl = (Giornale)enumeratore.Value; 
    Console.WriteLine("Nome: {0}, Direttore: {1}, Anno di fondazione: {2}", grl.getNome(), grl.getDirettore(), grl.getAnno()); 
    Console.WriteLine("la chiave è presente"); 
    Console.WriteLine(quotidiani[answer]); 
    break; 
} 
else { 
    Console.WriteLine("Chiave non esistente"); 
    break; 
} 
class Giornale { 
    string nomeQuotidiano = ""; 
    string dirQuotidiano = ""; 
    string annoQuotidiano = ""; 

    // Funzioni di assegnazione: 
    public void nome(string nQuotidiano) { 
     this.nomeQuotidiano = nQuotidiano; 
    } 

    public void direttore(string dQuotidiano) { 
     this.dirQuotidiano = dQuotidiano; 
    } 

    public void anno(string aQuotidiano){ 
     this.annoQuotidiano = aQuotidiano; 
    } 

    // Funzioni di richiamo: 
    public string getNome() { 
     return this.nomeQuotidiano; 
    } 

    public string getDirettore() { 
     return this.dirQuotidiano; 
    } 

    public string getAnno() { 
     return this.annoQuotidiano; 
    } 
} 

對不起,如果對象和東西的名稱是意大利人,我沒想到的是我沒能停留在這一點上。

基本上,我被卡住的地方就在評論代碼塊中:我想要做的是在哈希表中找到它的3個對象之一,並使用它的鍵獲取其元素。

所以,我想把關鍵(與readline方法),並找到關鍵的對象的元素。我怎樣才能做到這一點?可能解決方案非常簡單,但我現在看不到它。

+0

隨着['Hashtable.Item'](http://msdn.microsoft.com/en -us/library/system.collections.hashtable.item(v = vs.110).aspx):即'value = hashTable [key]'。但應該使用[Dictionary](http://msdn.microsoft.com/en-us/library/xfhwa508(v = vs.110).aspx)來代替它。它更新,是泛型的,並符合泛型IDictionary'/ IEnumerable',並在LINQ中表現更好。 – user2864740

+0

oft:您應該使用** [Properties](http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx)**而不是定製的,類似於java的'get' /'set'方法。 – MarcinJuraszek

回答

4
Hashtable quotidiani = new Hashtable(); 
var value = quotidiani["key"]; 

關於哈希表的更多信息可以參考here。在.NET中,哈希表是一種舊式的集合類型,您可能要考慮使用Dictionaries

+0

我會看看字典,謝謝。現在,問題是嘗試使用item屬性,我得到的是與鍵關聯的值,而不是對象的值(與鍵關聯)。基本上,我得到了「Console.Application1.Giornale」而不是Nome,Direttore等。你能告訴我在這次比賽中使用這個屬性的確切過程嗎?也許這是正確的方式去做我想做的事,但是我這樣做是愚蠢的。 – liveAndrew

-1

我解決了!做什麼我的意思是代碼塊是這樣的:

Console.WriteLine("Di quale giornale vuoi le informazioni? (inserisci la chiave)"); 
     var key = Console.ReadLine(); 

     var value = quotidiani[key]; 

     Giornale grl = (Giornale)value; 



     Console.WriteLine("Nome: {0}, Direttore: {1}, Anno di fondazione: {2}",grl.getNome(), grl.getDirettore(), grl.getAnno()); 

謝謝大家的提示:P

相關問題