我遇到了这行代码..出现以下错误消息
代码的"type of conditional expression cannot be determined because there is no implicit conversion between int and string"
和c.TrackID
位线上的c.Times
。
我尝试使用此(object)
解决方案from here和this one too,但没有一个主题有效。
我在这里做错了什么?这是您检查的代码:
Func<TopPlayed, string> orderingFunction = (c => sortColumnIndex == 1 && is_trackID_Sortable ? c.TrackID :
sortColumnIndex == 2 && is_trackName_Sortable ? c.TrackName :
sortColumnIndex == 3 && is_artistName_Sortable ? c.ArtistName :
sortColumnIndex == 4 && is_times_Sortable ? c.Times : "");
答案 0 :(得分:0)
ternary statements返回的值的返回类型必须相互匹配。将ToString()
加到非String
的<{1}}上:
c.TrackID.ToString()
答案 1 :(得分:0)
这里的错误是Ternary Operator必须能够通过将true(“?”)和false(“*”)结果与单个公共类型相匹配来确定输出。如果无法进行此匹配,则会抛出您看到的异常。
要解决此问题,请确保两个结果都是相同的类型。对于Int,只需附加.ToString。
Func<TopPlayed, string> orderingFunction = (c => sortColumnIndex == 1 && is_trackID_Sortable ?
c.TrackID.ToString() : // This will solve the Int/String conversion
sortColumnIndex == 2 && is_trackName_Sortable ? c.TrackName :
sortColumnIndex == 3 && is_artistName_Sortable ? c.ArtistName :
sortColumnIndex == 4 && is_times_Sortable ? c.Times :
"");
在其他情况下,您可能需要使用显式转换,例如
...
? mySomeTypeObject
: (SomeType)null
答案 2 :(得分:0)
如果c.TrackId是一个int,那么你不能把最后一个值保留为空字符串,你也需要输入一个int值
Function = (c => (sortColumnIndex == 1 && is_trackID_Sortable) ? c.TrackID :
(sortColumnIndex == 2 && is_trackName_Sortable) ? c.TrackName :
(sortColumnIndex == 3 && is_artistName_Sortable) ? c.ArtistName :
(sortColumnIndex == 4 && is_times_Sortable) ? c.Times :0);
使用parenthesys也是一个好主意