1

こんにちは、プロパティ リフレクション情報に基づいて、2 つのオブジェクトを特定の型にキャストしようとしています。これを動的に実行したいので、2 つのオブジェクトをこのクラスに含めることができるタイプごとに多数のスイッチ ケースなどを必要としません。全体として、それらはほとんど int または float になります。現時点では、「var」および「object」キーワードを使用して、入力された調整値とプロパティの元の値を保持しようとしました。

// .. snip

/* Get property information. */
PropertyInfo propInfo = classObj.GetType().GetProperty("property-name");
if (propInfo == null)
    continue;

/* Prepare object values. */
object orgVal = propInfo.GetValue( classObj, null );
object adjVal = Convert.ChangeType( strAdjust, propInfo.GetType(), new CultureInfo("en-us"));

// .. math on objects here
// ex. orgVal += adjVal;

// .. snip

入力調整値は文字列ですが、'int' または 'float' 形式のいずれかであるため、簡単に変換できます。これはすべて正常に機能します。問題となるのは、元の値を新しい調整値で調整できるキャストだけです。

私は.NET 4.0でこのようなことを達成できる「動的」キーワードがあることを知っていますが、現在私は3.5を使用して立ち往生しています。

どちらのオブジェクトも、プロパティ情報 propInfo.GetType() の型を使用します。

これに関するヘルプは大歓迎です。おそらく、これを達成するためにここで基本的なことを見落としていると思います。前もって感謝します。

-CK

編集:

言い忘れましたが、申し訳ありませんが、これは Zune HD で開発されているため、アクセスできるフレームワークは、使用できる/できないものにかなり制限されています。

4

2 に答える 2

2

C#3.5には、TypeConverterhttp://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspxというクラスがあります

これらは、タイプ情報に基づいて、あるタイプから別のタイプに変換するメカニズムを提供します。

System.ComponentModel.TypeConverter GetConverter(System.Type type) 

コンバーターを取得するために使用され、

public object TypeConverter.ConvertFrom(object value)

変換を行います。intやfloatなどの基本型用のコンバーターが組み込まれており、独自の型用のカスタムコンバーターを作成することができます。

Microsoftには、ここにそれらを書くためのガイドがあります。 http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx

于 2010-03-09T23:09:27.817 に答える
0

私が考えることができるこれを行うことができるいくつかの方法があります。リフレクションを使用して、「op_Addition」メソッド (基本的には「演算子 +」) を取得できます。しかし、私がそれを行う方法は、ラムダを使用することです:

var orgValueParam = Expression.Parameter(propInfo.PropertyType, "lhs");
var adjValueParam = Expression.Parameter(propInfo.PropertyType, "rhs");

var expr = Expression.Add(orgValueParam, adjValueParam);
var func = Expression.Lambda(expr, orgValueParam, adjValueParam).Compile();
var result = func(orgValue, adjValue);

注: 私はこれを実際にテストしていないので、確実に機能するかどうかはわかりませんが、ここから始めます...

于 2010-03-09T23:05:18.797 に答える