2010-02-03 7 views
1

클래스 Foo가 있습니다. Foo에는 public string x의 속성이 있습니다.클래스 인스턴스를 Hashtable에 저장

Foo를 ONE와 TWO로 몇 번 인스턴스화하고 해당 인스턴스를 키 1과 2가있는 Hashtable Bar에 각각 추가하려고합니다. 특정 인스턴스에 대해 문자열 x를 얻으려면 어떻게해야합니까?

Bar [1] .x와 같은 것을 시도했지만 속성 x가 인식되지 않습니다.

내가 뭘 잘못하고 있니?

답변

6

Hashtable 대신 Dictionary<int, Foo>을 사용해야합니다. Hashtable은 제네릭이없는 요일에 사용되지 않는 클래스입니다. 키와 값을 object 유형으로 저장합니다. 반면에 Dictionary<TKey,TValue>은 강력한 형식의 제네릭 컬렉션입니다. 당신이 어떤 이유로 Hashtable (예를 들어, C# 1.0)를 사용하려면

, 당신은 객체를 캐스팅해야합니다 : 오유가 해시 테이블에서 검색하면

((Foo)Bar[1]).x 
0

당신이 캐스팅해야 할 수도 있습니다. 시도해보십시오 : string s = (myHashtable [myKey] as Foo) .x;

Arg! Mehrdad Afshari의 답변을 보았습니다. 정확하게 이것을 지적합니다.

+0

"as"의 사용법을 다시 읽어보십시오. http://stackoverflow.com/questions/2139798/why-is-the-c-as-operator-so- 대중/2139818 # 2139818 –

+0

"as"를 사용하는 것만 큼 빠른 라인이었습니다. "as"또는 운동에 대한 직접적인 캐스트를 사용하겠다는 결정을 내릴 것입니다. 그러나 Mehrdad에게 감사드립니다 링크 – FOR

관련 문제