传递正确的参数时,构造函数中的InvalidCastException

时间:2017-06-07 15:19:48

标签: c# exception casting datarow

所以我有这个方法可以创建一个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):

Exception Screenshot

2 个答案:

答案 0 :(得分:1)

因此,可空列ParentFk似乎存在问题。 而不是

var parent = (int?) row["ParentFk"]

我用过:

var parent = row["ParentFk"] == DBNull.Value ? null : (int?)row["ParentFk"];

我之前使用了DataRow的可空列,但这个奇怪的例子从未发生过,而且它总是变为空。

修改

使用此:

var parent = row.IsNull("ParentFk") ? null : (int?)row["ParentFk"]

答案 1 :(得分:1)

我通过使用扩展方法来检查null / DBNull

来处理这种情况
for item in nested:
    _iterable = item if isinstance(item, list) else (item,)
    for num in _iterable:
        _element = num
        result.append(_element)