2012-01-25 7 views
0

C#을 사용하여 기본 속성/값 매핑 클래스를 코딩합니다.표현식을 사용하여 특정 멤버를 대상으로 지정하는 방법

개체의 특정 멤버를 대상으로 지정하고 람다 식으로 해당 멤버와 관련된 다양한 작업을 지정할 수 있기를 원합니다.

아이디어는 그래서 같은 정적 메소드 것을 사용하여 새 매핑을 구성하는 것입니다 :이 예에서

var myMapping = Mapping<TObject>.New(o => o.MyProperty).Read(GetString); 

을, TObject의 누구의 재산 내가 매핑 할 객체의 유형이며, 새로운 (...) TObject의 'MyProperty'멤버를 대상으로하고 Read (...)는 'MyProperty'와 동일한 유형의 값을 반환하는 표현식을 정의합니다.

  1. 어떤 멤버가와 연관된 :

    그래서 우리가 지금 알고있는 '매핑'개체가 있습니다.

  2. 해당 멤버에 대한 값을 얻는 방법.

그러면 'Mapper'의 상속자까지 해당 값으로 해당 멤버를 설정하는 방법에 대한 논리를 남길 수 있습니다. 예 : 특정 유형의 매핑은 유효성이있는 경우 MyProperty 만 설정하여 읽은 값을 '유효성을 검사'하려고 할 수 있습니다.

당신은 다음과 같이 당신의 매핑을 사용합니다 :

'myTObject는'형식의 인스턴스 'TObject의를'입니다
myMapping.Read(myTObject); 

.

RhinoMock과 같이 특정 멤버를 대상으로하고 옵션을 설정할 수있는 라이브러리를 조롱하는 경우 이러한 종류의 구현이 일반적으로 발생합니다.

누군가가 이걸 달성하는 방법에 대한 예를 제공 할 수 있습니까, 아니면 적어도 내 머리가 구름에 있는지 말해 줄 수 있습니까?

+0

그것은 전혀 아니다 컴파일 할 때 수행 할 작업을 명확하게 지정하고 실행 시간에 수행 할 작업을 정의합니다. 바로 지금,'var myMapping = (Func ) (o => o.MyProperty);'그렇다면'var s = myMapping (someTOject); – AakashM

+0

필요한 종류의 물건입니까? http://stackoverflow.com/questions/8990231/how-can-i-create-a-dynamic-select-on-an-ienumerablet-at-runtime/8990465#8990465 – AlanT

답변

0

키, 값 쌍에 대해 이야기하고 있습니까? Linq은 이미 Dictionary<T1, T2> 유형을 구현합니다. 첫 번째 유형은 키이고 두 번째 유형은 값입니다.

당신은 할 수 있습니다 :

Dictionary<TObject, string> myMapping = new Dictionary(TObject, string); 

myMapping.Add(new TObject(), "some string"); 

을가 될 것이다 읽으려면 :

string someString = myMapping[tObjectInstance].Value; 

당신은 여기를 구현하기 위해 사전 클래스에 대한 자세한 방법을 읽을 수 있습니다 http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

관련 문제