1

MyClass既知のタイプのパブリックパラメータをから更新しようとしていますNameValueCollection(以下のコードを参照)。これはMVC3可能です。クラスには、これを正確に実行するメソッドがあります。しかし、私はこれを外でやりたいと思います。ControllerUpdateModelRequest.ParamsController

何かご意見は?

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

4

1 に答える 1

2

このタスクを実行するには、リフレクションを使用する必要があります。

このコードは適切な検証なしで提供されているため、メソッドに含める必要があります。

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

}

このコードにはエラーがある可能性がありますが、その場合でも、一般的な考え方はここにあります。2つの注意:プロパティがMyClassに存在しない場合、またはプロパティタイプを文字列から割り当てることができない場合、このコードは無残に失敗します。したがって、適切な検証が必要になります(私は自分自身を繰り返しています)。

式ツリーをコンパイルできるため、特に同じ既知の型に多くの値を設定している場合は、式ツリーを使用してジョブを実行することもできます。

于 2011-02-10T16:52:22.923 に答える