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()。假设我可以从 a 转换StringtObj.GetType().

4

2 回答 2

1

我认为这归结为将字符串转换为任何其他类型。那有问题。您如何将字符串转换为 a Form、 aList<>或 a Random?它需要您为 .NET Framework 中的每种类型(或者可能是 Universe 中的每种现有类型)编写一个转换器。

你不应该尝试这样做。我不知道您要达到什么目的,但几乎可以肯定有更好的方法。

于 2012-05-11T00:15:45.740 回答
0

没有办法允许这种语法,但您可以执行以下操作:

foo.Set(bar, "_i");

在哪里Set使用以下内容:

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

其中propertyNametObjvalue在别处定义。

于 2012-05-11T00:02:01.570 回答