0

通常、オブジェクトがクラス インスタンスの場合、リフレクションを使用してそのメンバーに値を設定します。次の点を考慮してください。

class Foo
{
  public Control _tCtrl { get; set; }
  public Object _tObj { get; set; }

  public void Set()
  {
    // How do I give tObj the converted value of _tCtrl.ToString() ?

    // var val = Convert.ChangeType( _tCtrl.ToString(), tObj.GetType() );
    // _tObj.SetValue( val );
  }
}

それを呼び出すと、次のようになります。

Class Bar
{
  public Int32 _i { get; set; }
}


Bar bar = new Bar();   
Foo foo = new Foo();

foo._tCtrl = new TextBox() { Text = "100" };
foo._tObj = bar._i;    
foo.Set();

または:

Foo foo = new Foo();
Int32 i;

foo._tCtrl = new TextBox() { Text = "100" };
foo._tObj = i;

foo.Set();    

Set() には何でも渡すことができます。Stringから任意の型に変換できると仮定しtObj.GetType()ます。

4

2 に答える 2

1

これが要約すると、文字列を他の型に変換することだと思います。それには問題があります。Form文字列を a 、 a List<>、または a にどのように変換しますRandomか? .NET Framework 内のすべての型 (または場合によっては、ユニバース内のすべての既存の型) に対してコンバーターを作成する必要があります。

これをやろうとしてはいけません。あなたが何を達成しようとしているのかはわかりませんが、ほぼ間違いなくより良い方法があります。

于 2012-05-11T00:15:45.740 に答える
0

そのような構文を許可する方法はありませんが、次のことを行うことができます。

foo.Set(bar, "_i");

whereSetは次を使用します。

type.GetProperty(propertyName, Type.EmptyTypes).SetValue(tObj, value, Type.EmptyTypes);

propertyNametObj、およびは別の場所valueで定義されています。

于 2012-05-11T00:02:01.570 に答える