簡體   English   中英

無法將類型為“ System.Double”的對象轉換為類型為“ System.Int32”的對象

[英]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 loopdataTblFieldNames propertyinfos中的問題

類型“ System.Double”的對象不能轉換為類型“ System.Int32”。

有人幫我解決這個問題嗎?

您可以使用Convert.ChangeType方法

Convert.ChangeType(dataRow[aField.Name], propertyInfos.PropertyType)

它將嘗試一些數字轉換(例如,從doubleint的轉換,將二進制表示形式從浮點更改為整數(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.

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