2013-12-19 52 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

相关问题