传递正确参数时构造函数中的 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"];

我以前使用过 DataRows 和可为空的列,但是这个奇怪的例外从未发生过,它总是变成空的。

编辑:

使用这个:

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);
}