C#-在'int'和<null>之间没有隐式转换

时间:2018-12-24 13:42:30

标签: c#

static public string CreatePlaylist(int userId, string playlistName, int playlistImgId)
{
    DataTable playlistTable = Dal.CreatePlaylist(userId, playlistName, playlistImgId);

    Playlist p = new Playlist((int)playlistTable.Rows[0]["UserID"]);

    p.PlaylistName = playlistTable.Rows[0]["Playlist_Name"] == DBNull.Value ? null : (string)playlistTable.Rows[0]["Playlist_Name"];
    p.PlaylistImg = playlistTable.Rows[0]["Playlist_Img_ID"] == DBNull.Value ? null :  (int)playlistTable.Rows[0]["Playlist_img_ID"];

    return new JavaScriptSerializer().Serialize(p);

}

我收到此错误:

  

无法确定条件表达式的类型,因为'int'和

之间没有隐式转换

我发现了与此类似的问题,但不了解他们的解决方案。

1 个答案:

答案 0 :(得分:3)

您正在将playlistTable.Rows[0]["Playlist_img_ID"]转换为int,但是您有一个三元运算符(?:),其中另一个操作数为null。

intnull对于三元操作不兼容。您应该使用可为空的int?类型。

代替:

p.PlaylistImg = playlistTable.Rows[0]["Playlist_Img_ID"] == DBNull.Value ? null :  (int)playlistTable.Rows[0]["Playlist_img_ID"];

要做:

p.PlaylistImg = playlistTable.Rows[0]["Playlist_Img_ID"] == DBNull.Value ? null :  (int?)playlistTable.Rows[0]["Playlist_img_ID"];

请参见Conditional operator assignment with Nullable<value> types?

相关问题