2011-08-22 1 views
1

키 객체의 문자열 표현을 추출하는 방법

내 프레젠테이션 계층에서이 사전을 반복하면서 각 항목을 ListBox 컨트롤에 추가해야합니다. ListBox 컨트롤이 값으로 사용할 수있는 문자열로 MyObject (키 역할도 함)를 변환하는 방법을 알아내는 데 어려움을 겪고 있습니다. 나는 다음과 같이 MyObject.GetHashCode()를 명시 적으로 호출해야 하는가?

MyListBox.Add(new ListItem(myObject.Name, myObject.GetHashCode()) 
+1

MyObject의 Name = "Foo"및 Section = (일부 섹션 ID, 숫자가 3이라고 가정 해 봅시다), Listbox에 표시 할 내용을 표시 하시겠습니까? –

+0

gethashcode 메서드는 int를 반환합니다. 표현 레이어에 의미가 없습니다. – Baz1nga

+1

값 개체가 키인 경우 IEnumerable 대신 IDictionary를 사용해야하는 특별한 이유가 있습니까? – EtherDragon

답변

0

난 그냥 MyObject.GetHashCode()를 명시 적으로 호출해야

아니, GetHashCode()은 다음과 같습니다

  1. 하지 당신에게 고유 한 가치를 제공하기 위해 보장 및
  2. 는 생산은하는 리버스 엔지니어링하는 것은 매우 어려운 될 것 e a MyObject from.

대신 각 MyObject에는 고유 한 식별자 키가 있어야합니다. 이 값은 enum 값이거나 데이터베이스의 IDENTITY 열에 의해 생성 된 숫자 일 수도 있고 각각 MyObject을 고유하게 식별하는 string 일 수도 있고 저장소로 사용하는 컬렉션이나 데이터베이스에서 MyObject을 가져올 수 있습니다.

오직 주어진 NameSection 단일 MyObject이있을 수 있다면, 당신은 단지 두 개의 결합 할 수 있습니다 : SectionId + ":" + Name합니다. 그렇게하면 사실 이후에 두 값을 파싱 할 수 있습니다.

+0

MyObject는 "하이브리드"객체이다. (옳은 용어인지는 모르겠다.) MyObject는 해당 데이터베이스 행을 가진 엔티티를 나타내거나 비 지속/파생 엔티티를 나타낼 수있다. Equals를 재정의하려는 시도는 모든 MyObject에 대한 데이터베이스 식별자가 존재하지 않는다는 사실을 피하는 방법이었습니다. 여기에 적용 할 더 좋은 패턴이 있습니까? –

+0

@Dirk : 허용 할 의도로 ListBox에 넣는 것으로 가정합니다 사용자가 'MyObject'를 선택해야합니다. 그래서 PostBack (Webforms를 가정합니다 - ASP.NET 태그가 도움이되었을 것입니다)에서이 문자열 값을 꺼내어 어떻게 든'MyObject'를 나타냅니다 어르가 선택했다. PostBack의'Name' 또는'SectionId' 만 신경 쓰면 쉽게 할 수 있습니다.'Name' 또는'SectionId '를 사용하십시오.ToString()'을 ListItem의 값으로 사용합니다. 그러나 더 많은 정보가 필요하다면 정확히 어떤 MyObject가 해당 정보를 가져올지를 고유하게 식별 할 수있는 방법을 찾아야합니다. – StriplingWarrior

1

나는 overriding the toString method의 생각과 여기에서 당신은 기본적으로 UI를 내가 제대로 질문을 이해

희망에 표시하는 의미있는 문자열을 생성하는 코드를 작성합니다.