[英]PropertyInfo.SetValue unable to convert string to Decimal
我有一個數據表,其中有不同數據類型的列(主要是int64和string)。 我試圖將此數據表轉換為對象列表。 我正在使用這些方法,
public static List<T> ConvertDataTable<T>(DataTable dt)
{
List<T> data = new List<T>();
foreach (DataRow row in dt.Rows)
{
T item = GetItem<T>(row);
data.Add(item);
}
return data;
}
下面的GetItem()(更精確地說是pro.SetValue()
)方法在嘗試轉換數據datacolumn
值時拋出異常( Object of type 'System.String' cannot be converted to type 'System.Decimal'
。)將string
轉換為Decimal
類型的class屬性
private static T GetItem<T>(DataRow dr)
{
Type temp = typeof(T);
T obj = Activator.CreateInstance<T>();
foreach (DataColumn column in dr.Table.Columns)
{
foreach (PropertyInfo pro in temp.GetProperties())
{
if (pro.Name == column.ColumnName)
pro.SetValue(obj, dr[column.ColumnName], null);
else
continue;
}
}
return obj;
}
這是MyClass
,別無所求
public class AgriSales
{
public Int64 Id { get; set; }
public string Type { get; set; }
public Decimal Cost { get; set; }
}
有人可以引導我以正確的方式克服我面臨的障礙嗎?
使用Convert.ChangeType()
可以幫助您。 但是,對於更復雜的類型,您可能需要實施相同的保護措施。
pro.SetValue(obj, Convert.ChangeType(dr[column.ColumnName], pro.PropertyType), null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.