0

私の関数は、オブジェクト型のパラメーター「値」を受け取ります。オブジェクトのメンバーに割り当てたいのですが、キャストは暗黙的に行われないため、明示的に指定する必要があります。ただし、オブジェクトでそのメンバーの現在のタイプを実際に指定したくないので、次のようにすることができます。

positiveOrder.OrderID = (int)value;

しかし、ビジネス要件が変化し、OrderID が別の方法で生成および格納された場合 (たとえば、GUIDS の Strings へのタイプの変更など)、ここに戻って変更する必要があり、これは望ましくない凝集です。次のようなコードのさまざまな順列を試しました

positiveOrder.OrderID = value as thisOrder.OrderID.GetType();

また

positiveOrder.OrderID = (typeof(thisOrder.OrderID)) value;

しかし、何も機能していないようです。変換する型をプログラムで指定するアイデアはありますか? Order クラスは変更されないため、コンパイル時または実行時に行うことができます。

4

2 に答える 2

2

positiveOrder.OrderID(文字列で表されている場合でも)常に整数になる場合は、メンバーを整数以外に変更しないでください。代わりに、さまざまなソースタイプを処理できるメソッドを公開してください。

例えば:

public void SetOrderID(object value)
{
    this.OrderID = Convert.ToInt32(value);
}

を参照してくださいConvert.ToInt32()

于 2012-07-06T12:49:05.323 に答える
0

何かのようなもの:

using System.Reflection;

receiver.GetType().GetProperty(propName).SetValue(receiver, value, null);
于 2012-07-06T12:48:55.743 に答える