2011-02-10 5 views
1

NameValueCollection (알려진 코드 참조)에서 알려진 유형의 공개 매개 변수 MyClass을 업데이트하려고합니다. 이 에서 MVC3이 가능하고, Controller 클래스는 정확히 Request.Params으로 UpdateModel 메서드를 사용합니다. 그래도 Controller 외부에서이 작업을하고 싶습니다.NameValueCollection (또는 비슷한)에서 개체 매개 변수를 업데이트하려면 어떻게합니까?

의견이 있으십니까?

public class MyClass 
{ 
    public string MyParam { get; set; } 
} 

...

var values = new NameValueCollection() { { "MyParam", "any string value for my param" } }; 
var myInstance = new MyClass(); 
Update(myInstance, values); 

건배, T

답변

2

당신은이 작업을 수행하기 위해 반사를 사용해야합니다 :이 코드는 적절한 검증없이 을 제공

을하고, 방법에 넣어야한다.

var type = myInstance.GetType(); 
foreach(var keyValue in values) 
{ 
    type.InvokeMember(keyValue.Key,BindingFlags.SetProperty,null,myInstance, new object[]{keyValue.Value});  

} 

이 코드에는 오류가있을 수 있지만이 경우에도 일반적인 생각이 있습니다. 2 설명 :이 코드는 MyClass에 속성이 없거나 문자열에서 속성 유형을 할당 할 수없는 경우 비참하게 실패합니다. 그러므로 적절한 확인이 필요합니다 (나는 알고 있으며, 나는 스스로 반복하고 있음).

표현 트리를 컴파일 할 수 있으므로 같은 알려진 유형에 많은 값을 설정하는 경우 표현 트리를 사용하여 작업을 수행 할 수도 있습니다.

관련 문제