none
Hashtable의 결과를 string 변수에 대입이 안되는 이유좀 알려주세요.(string st = ht["a"];) RRS feed

  • 질문

  • 안녕하세요.

    아래는 문제 없이 "1"을 출력해주는 문장입니다.

    Hashtable ht = new Hashtable();
    ht["a"] = "1";
    Console.WriteLine(ht["a"]);

    언뜻 이해하기로는 ht["a"] 의 결과는 결국 "1" 이라는 string 인데, 이것을 아래와 같이,

    string st = ht["a"];

    라고 하면 오류가 나는 이유좀 부탁드립니다.

     


    2015년 2월 23일 월요일 오후 5:07

답변

  • ht["a"]라고 실행하는 경우, Hashtable의 indexer 메서드가 호출됩니다. 그리고 그 타입은 object이기 때문에 형식 안정성에 민감한 C# 언어에서는 이를 컴파일 오류로 잡아주는 것입니다.

    따라서, 그냥 다음과 같이 형변환을 해주시면 됩니다.

    string st = ht["a"] as string;

    또는, .NET 2.0부터 추가된 Generic을 이용한 Dictionary 타입을 쓰시면 좀 더 형식 안정성이 있는 코드를 만들 수 있습니다.

    Dictionary<string, string> ht = new Dictionary<string, string>();
    ht["a"] = "1";
    string st = ht["a"];

    와 같이 프로그램을 할 수 있습니다.

    • 답변으로 표시됨 Cruiser9 2015년 2월 24일 화요일 오후 3:03
    2015년 2월 24일 화요일 오전 12:30