原因:
今天在工作时遇到这样一个问题,我需要修改一个产品中的某条属性,我以往的做法就是把所有的数据都传递过去管它有没有修改统统重新赋值一边,或者写很多个方法一一修改.
但这次属性如此之多,而且很多时候往往只修改其中一个属性,这个时候我就犯难了.
我想,如果有这样一个方法只需要传入属性的字符串形式,和新值就能够修改这个属性那该多好啊,一是google了一下,得知"反射"这个东东可以,那就试试吧,结果成功了,拿出来分享一下
过程:
首先定义类
/**/
///自定义类
public class ComProduct
... {
private int _ProductID;
private string _ProductName;
public ComProduct()
...{ }
public int ProductID
...{
get ...{ return _ProductID; }
set ...{ _ProductID = value; }
}
public string ProductName
...{
get ...{ return _ProductName; }
set ...{ _ProductName = value; }
}
}
public class ComProduct
... {
private int _ProductID;
private string _ProductName;
public ComProduct()
...{ }
public int ProductID
...{
get ...{ return _ProductID; }
set ...{ _ProductID = value; }
}
public string ProductName
...{
get ...{ return _ProductName; }
set ...{ _ProductName = value; }
}
}
写一个修改属性的方法
/**/
///修改属性
public static void ModifyObjProperty( string PropertyName, object newValue, ref ComProduct comPro)
... {
Type t = typeof(ComProduct);
PropertyInfo propertyInfo1 = t.GetProperty(PropertyName);
propertyInfo1.SetValue(comPro, newValue, null);
}
/**/ ///然后调用
ComProduct comproduct = new ComProduct();
ModifyObjProperty( " ProductName " ,( object ) " NewName " , ref comproduct)
ModifyObjProperty( " ProductID " ,( object ) 1 , ref comproduct)
/**/ ///输出
Response.Write(comproduct.ProductID + " <br> " + comproduct.ProductName);
public static void ModifyObjProperty( string PropertyName, object newValue, ref ComProduct comPro)
... {
Type t = typeof(ComProduct);
PropertyInfo propertyInfo1 = t.GetProperty(PropertyName);
propertyInfo1.SetValue(comPro, newValue, null);
}
/**/ ///然后调用
ComProduct comproduct = new ComProduct();
ModifyObjProperty( " ProductName " ,( object ) " NewName " , ref comproduct)
ModifyObjProperty( " ProductID " ,( object ) 1 , ref comproduct)
/**/ ///输出
Response.Write(comproduct.ProductID + " <br> " + comproduct.ProductName);
OK 大告成 希望能给大家一点帮助
第一次写技术文章,写的不好还望大家原谅,有什么不对的地方或需要改进的地方请与我联系!