我想将DataRow转换为Object.我写了一堂课来做这件事.像这样的错误:
No overload for method 'SetValue' takes 2 arguments
No overload for method 'GetValue' takes 1 arguments
但我无法使用GetValues()和SetValues().将项目转换为4.5时.这是工作.我的项目设置平台目标是3.5(必须 - 因为我连接设备必须使用.NET 3.5).
如何解决这个问题?
这是我的代码:
public DataRowToObject(DataRow row) { ListlistProperty = this.GetProperties(); foreach (PropertyInfo prop in listProperty) { if (!row.Table.Columns.Contains(prop.Name) || row[prop.Name] == null || row[prop.Name] == DBNull.Value) { prop.SetValue(this, null); continue; } try { object value = Convert.ChangeType(row[prop.Name], prop.PropertyType); prop.SetValue(this, value); } catch { prop.SetValue(this, null); } } } public virtual Hashtable GetParameters() { Type type = this.GetType(); List listProperty = new List (type.GetProperties()); Hashtable result = new Hashtable(); foreach (PropertyInfo prop in listProperty) { result.Add(prop.Name, prop.GetValue(this)); } return result; }
Jcl.. 9
在.NET 4.5中添加PropertyInfo.SetValue
和PropertyInfo.GetValue
不使用索引器时会出现重载.
但它只是传递null
给以前版本的indexer参数(使用此和此重载).
所以:
prop.SetValue(this, value, null);
和
prop.GetValue(this, null);
这应该适用于.NET .3.5(直到最新版本)...实际上对于.NET 2.0及以上版本:-)
在.NET 4.5中添加PropertyInfo.SetValue
和PropertyInfo.GetValue
不使用索引器时会出现重载.
但它只是传递null
给以前版本的indexer参数(使用此和此重载).
所以:
prop.SetValue(this, value, null);
和
prop.GetValue(this, null);
这应该适用于.NET .3.5(直到最新版本)...实际上对于.NET 2.0及以上版本:-)