簡體   English   中英

PropertyInfo.SetValue無法將字符串轉換為十進制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM