C#-在';int';及<;空>;

C#-在';int';及<;空>;,c#,C#,我得到这个错误: 无法确定条件表达式的类型,因为在“int”和之间没有隐式转换 我发现了与此类似的问题,但不理解它们的解决方案。您正在强制转换播放列表。行[0][“Playlist\u img\u ID”]为int,但您有一个三元运算(?:),其中另一个操作数为null int和null对于三值运算不“兼容”。您应该使用可空的int?类型 而不是: static public string CreatePlaylist(int userId, string playlistName, int p

我得到这个错误:

无法确定条件表达式的类型,因为在“int”和之间没有隐式转换


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

您正在强制转换播放列表。行[0][“Playlist\u img\u ID”]为int,但您有一个三元运算(?:),其中另一个操作数为null

int
null
对于三值运算不“兼容”。您应该使用可空的
int?
类型

而不是:

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

}
做:


参见

Is
p.playlimg
an
int
或an
int?
?如果是第一个,将
null
更改为
0
,如果是第二个,将
(int)
更改为
(int?
,因为我们的答案基本相同,所以我删除了我的答案,并对你的答案进行了投票。你似乎比我更需要声誉积分。如果
playlimg
被声明为
int
,该怎么办?这只会引发另一个编译错误。最好等到我们有足够的信息,而不是guess@Camilo,你说得对。你的评论更准确。
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"];