我该如何进行隐式转换?

时间:2014-05-30 14:35:53

标签: c# implicit-conversion

我遇到了这行代码..出现以下错误消息 代码的"type of conditional expression cannot be determined because there is no implicit conversion between int and string"c.TrackID位线上的c.Times

我尝试使用此(object)解决方案from herethis 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 : "");

3 个答案:

答案 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也是一个好主意