![](/img/trans.png)
[英]System.InvalidCastException: Unable to cast object of type 'System.Double' to type 'System.Int32' in code
[英]Object of type 'System.Double' cannot be converted to type 'System.Int32'
我在我的代碼中system.int32
問題,它不能告訴system.int32
轉換為system.double
,這是我的代碼
我有一個帶有4個字符串變量和2個整數變量的對象。
public class MyObject
{
public int id;
public string name1;
public string name2;
public string name3;
public string name4;
public int id2;
}
/*Converts DataTable To List*/
public static List<TSource> ToList<TSource>(this DataTable dataTable) where TSource : new()
{
var dataList = new List<TSource>();
const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
var objFieldNames = (from PropertyInfo aProp in typeof(TSource).GetProperties(flags)
select new { Name = aProp.Name, Type = Nullable.GetUnderlyingType(aProp.PropertyType) ?? aProp.PropertyType }).ToList();
var dataTblFieldNames = (from DataColumn aHeader in dataTable.Columns
select new { Name = aHeader.ColumnName, Type = aHeader.DataType }).ToList();
var commonFields = objFieldNames.Intersect(dataTblFieldNames).ToList();
foreach (DataRow dataRow in dataTable.AsEnumerable().ToList())
{
var aTSource = new TSource();
foreach (var aField in objFieldNames)
{
PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name);
propertyInfos.SetValue(aTSource, dataRow[aField.Name], null);
}
dataList.Add(aTSource);
}
return dataList;
}
在我的objectfieldname
變量中,我正在獲取具有正確數據類型的所有變量,但是在dataTblFieldNames
變量中,其將int轉換為double,因此我在foreach loop
中dataTblFieldNames
propertyinfos
中的問題
類型“ System.Double”的對象不能轉換為類型“ System.Int32”。
有人幫我解決這個問題嗎?
您可以使用Convert.ChangeType
方法 :
Convert.ChangeType(dataRow[aField.Name], propertyInfos.PropertyType)
它將嘗試一些數字轉換(例如,從double
到int
的轉換,將二進制表示形式從浮點更改為整數(2的補碼)),以及一些對string
格式化/解析。
在分配值之前,您必須先找到屬性類型,並且還必須將值強制轉換為所需的類型,因為您不能直接將double類型分配給int類型。
if (propertyInfos.PropertyType == typeof(int))
{
propertyInfos.SetValue(aTSource, Convert.ToInt32(dataRow[aField.Name]), null);
}
輸入dataRow[aField.Name]
的類型為System.Double
而您要分配的字段的類型為System.Int32
。 但是Visual Studio已經告訴您如此清晰明了。
我無法告訴您該怎么做,因為我不知道您想做什么。 通過投射截斷雙精度嗎? 向上或向下取整? 也許完全是錯誤的領域? 我們不知道 你決定。
考慮到您不太可能想到上面的代碼並且仍然不理解錯誤,因此,最好是整夜睡眠和喝杯咖啡,或者詢問最初編寫此代碼的人,這是一個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.