无法将类型为“ System.Double”的对象转换为类型为“ System.Int32”的对象

use*_*020 0 .net c# asp.net asp.net-mvc

我在我的代码中遇到问题,其告诉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;
    }
Run Code Online (Sandbox Code Playgroud)

在我的objectfieldname变量中,我获取了所有具有正确数据类型的变量,但是在dataTblFieldNames 变量中,其将int转换为double,所以我propertyinfosforeach loop说这句话时面临问题

类型“ System.Double”的对象不能转换为类型“ System.Int32”。

有人帮我解决这个问题吗?

Jep*_*sen 5

您可以使用Convert.ChangeType方法

Convert.ChangeType(dataRow[aField.Name], propertyInfos.PropertyType)
Run Code Online (Sandbox Code Playgroud)

它将尝试一些数字转换(例如,从doubleto 的转换,将int二进制表示形式从浮点转换为整数(2的补码)),以及对to / from进行格式化/解析string