您好我尝试按以下方式填写Hashtable:
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
我对Hashtables的误解是什么? Hashtable存储类实例及其值的简单方法是什么?
答案 0 :(得分:3)
HashTable只是将键映射到值。您将字符串"1"
映射到字符串"resCourse.CID"
,这样您获得的结果就完全正常了。这样做是这样的:
catalog.Add("1", resCourse.CID);
catalog.Add("2", tauCourse.CID);
现在,您将映射所需的实际值,而不是字符串"resCourse.CID"
。
答案 1 :(得分:2)
您正在向哈希表添加显式字符串,而不是实际ID。
将两条catalog.Add
行替换为:
catalog.Add("1", resCourse.CID);
catalog.Add("2", tauCourse.CID);
值周围没有引号。
答案 2 :(得分:1)
删除resCourse.CID
语句中tauCourse.CID
和catalog.Add
周围的引号。您要添加文字字符串,而不是属性的值。
答案 3 :(得分: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);
}