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,所以我propertyinfos在foreach loop说这句话时面临问题
类型“ System.Double”的对象不能转换为类型“ System.Int32”。
有人帮我解决这个问题吗?
您可以使用Convert.ChangeType方法:
Convert.ChangeType(dataRow[aField.Name], propertyInfos.PropertyType)
Run Code Online (Sandbox Code Playgroud)
它将尝试一些数字转换(例如,从doubleto 的转换,将int二进制表示形式从浮点转换为整数(2的补码)),以及对to / from进行格式化/解析string。
| 归档时间: |
|
| 查看次数: |
10895 次 |
| 最近记录: |