Как обновить параметры объектов из коллекции NameValueCollection (или аналогичной)? - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь обновить общедоступные параметры известного типа MyClass из NameValueCollection (см. Код ниже). Это возможно в MVC3 , класс Controller имеет метод UpdateModel, который делает именно это с Request.Params. Я хотел бы сделать это за пределами Controller, хотя.

Есть мысли?

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

1 Ответ

2 голосов
/ 10 февраля 2011

Вы должны использовать отражение для выполнения этой задачи:

Этот код предоставляется без надлежащей проверки , и его следует поместить в метод.

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

}

Может быть ошибка в этом коде, но даже если это так, общая идея здесь. 2 примечания: этот код с треском провалится, если свойство не существует в MyClass или если тип свойства не может быть назначен из строки. Поэтому это потребовало бы надлежащей проверки (я знаю, я повторяюсь).

Вы также можете использовать дерево выражений для выполнения задания, особенно если вы устанавливаете много значений для одного и того же известного типа, поскольку деревья выражений могут быть скомпилированы.

...