2011-02-18 7 views
1

私はリフレクションでフィールドデータを設定しています。文字列をColorに変換する際に問題が発生しました。 Convert.ChangeType(stringValue,typeof(Color))は例外をスローします。どのように私は文字列を色に変換する

 PropertyInfo[] propertis = typeof(TEntity).GetProperties(); 
     foreach (var attribute in element.Attributes()) 
     { 
      var property = propertis.Where(x => x.Name == attribute.Name).FirstOrDefault(); 
      if (property != null) 
      { 
       property.SetValue(someVariable, Convert.ChangeType(attribute.Value,property.PropertyType), null); 
      } 
     } 

PS色の値が指定された色、Color.FromNameので、doesntの仕事

+3

これは名前付きの色ではなく、どのように正確に '色'に変換したいのですか? – mquander

+2

文字列にどのような値が含まれているかの例がない場合は – BrokenGlass

答えて

3

構造体がそれににTypeConverter属性を持つがオールウェイズされていないこのような状況での色に変換することができ、あなたは(あなたのケースでは)より有用ConvertFromStringもあります。この

var converter=TypeDescriptor.GetConverter(property.PropertyType); 
object convertedValue=converter.ConvertTo(attribute.Value, property.PropertyType); 
property.SetValue(someVariable, convertedValue, null); 

ような何かを行うことができますこの方法は:

var converter=TypeDescriptor.GetConverter(property.PropertyType); 
object convertedValue=converter.ConvertFromString(attribute.Value); 
property.SetValue(someVariable, convertedValue, null); 

リフレクター内のクラスを簡単に見てみると、それは、名前またはあなたが:-)

システム探しているものである彼ら進値で色を解析することを示唆しています.ComponentModel.TypeConverterフレームワークははPSノートに基づいてクラス

+0

うん、うまくいきます。ありがとう – Stecya

1

を変換することをより多くの柔軟性があり、私はあなたがこれを処理することができるとしているとは思いません。値が一貫していなければなりません。Color.FromNameを使用できる16進数の値なら、使用できる名前はColor.FromArgb

一貫性がない場合は、解析する方法を見つける必要があります変換を決定し、変換を完了します。