我写了一个类CustomDataTable
,该类继承了DataTable
但添加了函数ToHtml()
public static CustomDataTable : DataTable {
public Table ToHtml() {
Table tbl;
/*
logic for converting each row in the DataTable to HTML TableRow
*/
return tbl;
}
}
用法:
public static CustomDataTable getTable(String sql) {
SqlConnection con = new SqlConnection(connection_string);
SqlCommand cmd = new SqlCommand(sql,con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return (CustomDataTable)ds.Tables[0]; // this line triggers the exception
// Unable to cast object of type 'System.Data.DataTable' to type 'MyProject.CustomDataTable'
}
为什么强制转换失败?
答案 0 :(得分:2)
为什么强制转换失败?
因为它无效。 ds.Tables[0]
返回一个DataTable
,并且没有其他任何内容,并且您无法将DataTable
转换为更派生的类型,例如CustomDataTable
。
您可以考虑创建一个extension method来扩展DataTable
并使用ToHtml()
方法:
public static class MyExtensions
{
public Table ToHtml(this DataTable dt)
{
/*
logic for converting each row in the DataTable to HTML TableRow
*/
}
}
然后,您可以在任何DataTable
上调用它而无需强制转换,例如:
var htmlTable = ds.Tables[0].ToHtml();