我使用Datatable Extensions从Datatable转换为List。 在这里,当我试图向正常的List属性添加一行时,它的工作正常。 但是当我在列表中使用列表时,我面临着问题。我无法在属性中设置值。
private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
{
T item = new T();
foreach (var property in properties)
{
if (property.Name.Equals("ProductSpec"))
{
Type t = property.GetType();
// i am getting error when i am trying to do this
property.SetValue(item, ProductSpecIteration(property, row), null);
}
if (row.Table.Columns.Contains(property.Name))
{
property.SetValue(item, row[property.Name] == DBNull.Value?"":row[property.Name], null);
}
}
return item;
}
private static ProductSpec ProductSpecIteration(PropertyInfo property, DataRow row)
{
ProductSpec lstProductSpec = new ProductSpec();
lstProductSpec.product_specs_id = Convert.ToInt64(row["product_specs_id"]);
return lstProductSpec;
}
我无法一般地做到这一点。但即使我无法在此扩展中添加此内容?任何人都可以帮助我摆脱这种情况
答案 0 :(得分:1)
您试图转换从DataRow.Item [string]属性返回的对象,该属性无法直接设置。
string value = row[property.Name] == DBNull.Value?"":row[property.Name].ToString();
property.SetValue(item, Convert.ChangeType(value, property.PropertyType), null);
您可以使用的产品规格,
ProductSpec spec = ProductSpecIteration(property, row);
property.SetValue(item, Convert.ChangeType(spec , property.PropertyType), null);
但是,它可以在不更改类型的情况下正常工作,因为类型与属性类型相同
希望这会有所帮助。 您可以阅读更多相关信息here 您还可以阅读有关 IConvertible 界面here
的更多信息IConvertible 接口有助于返回所需的值,因为对象不实现IConvertible,因此无法获取所需格式的属性类型的值。
答案 1 :(得分:0)
我不知道你到底想要什么,但这个链接可能对你有帮助