通常,如果对象是类实例,我会使用反射为其成员设置值。请考虑以下事项:
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()
的任何类型。
答案 0 :(得分:1)
我认为这归结为将字符串转换为任何其他类型。那有问题。如何将字符串转换为Form
,List<>
或Random
?它需要您为.NET Framework中的每种类型(或者可能是Universe中的每个现有类型)编写转换器。
你不应该试图这样做。我不知道你想要达到的目标,但几乎肯定有更好的方法。
答案 1 :(得分:0)
无法允许这种语法,但您可以执行以下操作:
foo.Set(bar, "_i");
Set
使用以下内容:
type.GetProperty(propertyName, Type.EmptyTypes).SetValue(tObj, value, Type.EmptyTypes);
propertyName
,tObj
和value
在其他位置定义的位置。