传递正确参数时构造函数中的 InvalidCastException
InvalidCastException in constructor when passing the right parameters
所以我得到了从 DataRow
:
创建对象的方法
public Comment CreateComment(DataRow row)
{
if (row == null) return null;
var id = (int) row["CommentPk"];
var song = (int) row["SongFk"];
var user = (int) row["AuthorFk"];
var text = (string) row["Content"];
var parent = (int?) row["ParentFk"];
return new Comment(_provider, id, song, user, text, parent);
}
而Comment
的构造函数是:
public Comment(Provider provider, int id, int songid, int userid, string content, int? parentId)
它确实在构造函数行上崩溃了。我可以一步 (F11
) 到它:
所以这似乎是可空列 ParentFk
的问题。
而不是
var parent = (int?) row["ParentFk"]
我用过:
var parent = row["ParentFk"] == DBNull.Value ? null : (int?)row["ParentFk"];
我以前使用过 DataRow
s 和可为空的列,但是这个奇怪的例外从未发生过,它总是变成空的。
编辑:
使用这个:
var parent = row.IsNull("ParentFk") ? null : (int?)row["ParentFk"]
我通过使用扩展方法来检查 null/DBNull
来处理这种情况
int? i = row["CommentPk"].ToNullableInt();
public static int? ToNullableInt(this object value)
{
if (value == null || value == DBNull.Value)
return null;
return Convert.ToInt32(value);
}
所以我得到了从 DataRow
:
public Comment CreateComment(DataRow row)
{
if (row == null) return null;
var id = (int) row["CommentPk"];
var song = (int) row["SongFk"];
var user = (int) row["AuthorFk"];
var text = (string) row["Content"];
var parent = (int?) row["ParentFk"];
return new Comment(_provider, id, song, user, text, parent);
}
而Comment
的构造函数是:
public Comment(Provider provider, int id, int songid, int userid, string content, int? parentId)
它确实在构造函数行上崩溃了。我可以一步 (F11
) 到它:
所以这似乎是可空列 ParentFk
的问题。
而不是
var parent = (int?) row["ParentFk"]
我用过:
var parent = row["ParentFk"] == DBNull.Value ? null : (int?)row["ParentFk"];
我以前使用过 DataRow
s 和可为空的列,但是这个奇怪的例外从未发生过,它总是变成空的。
编辑:
使用这个:
var parent = row.IsNull("ParentFk") ? null : (int?)row["ParentFk"]
我通过使用扩展方法来检查 null/DBNull
来处理这种情况int? i = row["CommentPk"].ToNullableInt();
public static int? ToNullableInt(this object value)
{
if (value == null || value == DBNull.Value)
return null;
return Convert.ToInt32(value);
}