2009-06-18 19 views
0

Reflectionを使用してPropertyInfo.SetValue()でプロパティ値を設定しています。問題のプロパティは文字列であり、値を取得するオブジェクトは実際にはGUIDです。私はGUIDからプロセス中の文字列に変換したいのですが、これを有効にする何らかの暗黙のキャストを定義する方法はありますか?現時点では私はエラーを取得しています:Reflectionを使用してGUIDを文字列に変換する

"Object of type 'System.Guid' cannot be converted to type 'System.String'." 

は、私は型チェックを行うと、手動で必要に応じて変換することができると思いますが、舞台裏でそれを行うためのエレガントな方法がありますならば、それは好ましいことでしょう!

多くのありがとうございます。


編集:

propertyInfoInstance.SetValue(classInstance, objectWithValue, null) 

場所: 私はこのように見えるように非常に多くの私のコードたいと私は本当にただGUIDの.ToString()メソッドを呼び出すことはできませんobjectWithValueはint/bool/string/GUIDです。これはGUID以外のすべてでうまく動作します(暗黙のキャストがあります)!あらかじめタイプチェックを行い、GUIDを文字列に変換するだけでも、 "良い方法があるはずです..."と感じるだけです。

答えて

3

自分のオブジェクトに暗黙的なキャスト演算子しか定義できないということは間違いないと思います(誰かに教えてください)。手動guid.ToString();

+0

残念ながら、これは正しいと私は思っています。鍵は、この場合暗黙のキャストを定義することは不可能であると思われるので、手動でこのケースを処理する必要があります。汚い! –

3

stringとguidの間に暗黙のキャストがあるとは思わない。これを試してみてください:

guid.ToString(); 

質問2について:

if(propertyInfoInstance.PropertyType == typeof(string) && objectWithValue != null) 
{ 
    objectWithValue = objectWithValue.ToString(); 
} 
propertyInfoInstance.SetValue(classInstance, objectWithValue, null); 

私はそれがあまりにも厄介だとは思いません。

+0

+1これは正しいです。 stringとguidの間の暗黙の変換はありません。 –

0

/wの文字列にGUIDをダンプ対処する必要があります

あなたはGUIDの参照に.ToString()を試したことがありますか?そして、myValueとPropertyInfo.SetValue()を呼び出し

object myValue = /* source the value from wherever */; 
if (!(myValue is string)) myValue = myValue.ToString(); 

0

あなたはこのような何かを書くことができます。

関連する問題