2010-06-02 72 views
1

您好我试图以下列方式填充一个Hashtable:C#:在存储对象的实例(哈希表)

 ResearchCourse resCourse= new ResearchCourse();//Class Instance 
     resCourse.CID="RC1000"; 
     resCourse.CName="Rocket Science"; 

     TaughtCourse tauCourse= new TaughtCourse();//Class Instance 
     tauCourse.CID="TC1000"; 
     tauCourse.CName="Marketing"; 

     Hashtable catalog = new Hashtable(); 

     catalog.Add("1", "resCourse.CID"); 
     catalog.Add("2", "tauCourse.CID"); 


     foreach (DictionaryEntry de in catalog) 
     { 
      Console.WriteLine("{0}, {1}", de.Key, de.Value); 
     } 

输出结果到控制台是:

1,resCourse.CID
2,tauCourse.CID

预期结果是:

1,RC1000
2,TC2000

什么我误解有关散列表?
Hashtable存储类实例及其值的简单方法是什么?

+5

要添加字符串哈希表,在那里你必须添加的对象。请删除.Add方法调用的第二个理由中的引号:) – Bubba88 2010-06-02 19:36:21

回答

3

HashTable只是将键映射到值。您将字符串"1"映射到字符串"resCourse.CID",以便您获得的结果完全正常。做这样的方式:

catalog.Add("1", resCourse.CID); 
catalog.Add("2", tauCourse.CID); 

现在,您将映射您需要的真正价值,而不是字符串"resCourse.CID"

+0

感谢您的解释:) – DaGambit 2010-06-02 19:46:13

+0

欢迎:) – 2010-06-02 19:47:23

2

您将显式字符串添加到哈希表而不是实际的ID。

catalog.Add("1", resCourse.CID); 
catalog.Add("2", tauCourse.CID); 

周围的值没有引号:

替换为两个catalog.Add线。

1

删除catalog.Add陈述中的resCourse.CIDtauCourse.CID附近的引号。您正在添加文字字符串,而不是属性的值。

1

我假设你真的想存储整个对象:

catalog.Add("1", resCourse); 
catalog.Add("2", tauCourse); 

当然,一旦你到了那里你将必须有一个共同的基类(或接口)你两个疗程从为了获得访问该值:

public abstract class CourseBase { 
    public string CID { get; set; } 
    public string CName{ get; set; } 
} 

public class ResearchCourse : CourseBase { } 
public class TaughtCourse : CourseBase { } 

然后你可以存储/访问是这样的:

Hashtable catalog = new Hashtable(); 
catalog.Add("1", resCourse); 
catalog.Add("2", tauCourse); 

foreach (DictionaryEntry de in catalog) 
{ 
    Console.WriteLine("{0}, {1}", de.Key, ((CourseBase)de.Value).CID); 
} 

或者更好的是,使用一个通用的字典:

var resCourse = new ResearchCourse() { CID = "RC1000", CName = "Rocket Science" }; 
    var tauCourse = new ResearchCourse() { CID = "TC1000", CName = "Marketing" }; 

    var catalog = new Dictionary<string, CourseBase>(); 
    catalog.Add("1", resCourse); 
    catalog.Add("2", tauCourse); 

    foreach (string key in catalog.Keys) 
    { 
     Console.WriteLine("{0}, {1}", key, catalog[key].CID); 
    } 
+0

感谢您的额外信息,它会派上用场。 – DaGambit 2010-06-02 20:06:16

+0

它会帮助像我这样正在学习编程的其他人 – DaGambit 2010-06-02 20:07:11

+0

您是否确定您的两个子类(ResearchCourse和TaughtCourse)都是从CourseBase继承的?您的CourseBase定义是否包含CID作为属性? – 2010-06-02 20:44:44