2009-09-01 4 views
1

개체를 만드는 메서드를 호출하고 메서드에 전달 된 매개 변수를 기반으로 개체의 속성을 설정할 수 있기를 원합니다. 매개 변수의 수는 임의적이지만 catch는 문자열을 사용하고 싶지 않습니다. 나는 당신이 람다 식에서하는 것처럼 실제 속성을 사용하고 싶다. 대신 문자열 표현의 나는 실제 속성 참조 (f.Name)를 사용하여 그 라인을 따라일반 오브젝트에 임의의 수의 특성을 설정하는 방법은 무엇입니까?

controller.Create<Person>(f=>{f.Name = 'John', f.Age = 30}) 

또는 무언가 :

나는 다음과 같을 수 뭔가 메소드를 호출 할 수 있도록하려면 재산의.

또 다른 규정은 메서드 호출 전에 수행 할 작업이 필요 없다는 것입니다. 라이브러리에이 글을 쓰고 있는데, 사용자가 호출하고 전달 된 값으로 설정된 속성을 가진 객체를 가져 오는 것을 제외하고는 아무 것도 할 필요가 없다.

답변

2

:

controller.Create<Person>(f => { f.Name = 'John'; f.Age = 30; }) 

만들기 메소드 서명은 다음과 같습니다

public T Create<T>(Action<T> propertySetter) where T : class { 
    T value = ...; 
    propertySetter(value); 
    return value; 
} 

where T : class

엄격하게 여기 필요하지 않지만 T가 값 형식 인 경우, 해당 속성에 대한 수정 사항이 손실됩니다.

+1

변경 속성 setter to Func 및 반환 값; propertySetter (value)를 반환합니다. 참조 유형 및 값 유형에 대해 작동합니다. –

+0

룬 FS : 그런 식으로 람다에서는 return 문이 필요합니다. 나는 그것을 피하고 싶었다. –

+0

실제로는 을 내 시나리오에서 작동하도록 Create에서 제거해야했지만 훌륭하게 작동합니다. – Brian

관련 문제