无法确定条件表达式的类型,因为'int?'之间没有隐式转换和'字符串'

时间:2016-06-28 12:28:22

标签: c# linq

我有这行代码:

Ages = m.RelatedMultipleWorks.Count == 0 ? 
       m.RelatedLook.Age: m.RelatedLook.Age.ToString() + " | " +
                          m.RelatedMultipleWorks.
                            Select(z => z.RelatedLook.Age.ToString()).
                            Aggregate((current, next) => current + " | " + next)

这一行给出了这个错误:

Type of conditional expression cannot be determined because there is no implicit conversion between 'int?' and 'string' 

我无法理解为什么我会收到此错误。我怎么能摆脱它?感谢。

2 个答案:

答案 0 :(得分:1)

您的m.RelatedLook.Age大概是int?,但由于string,辅助三元表达式的结果为.Aggregate

Ages(大概)期望int?;三元组的后半部分不能隐式转换为int?,因此编译器会对你大喊大叫。这假设.Agesint?,否则您应该.ToString()检查m.RelatedLook.Age的结果。

听起来有点臭的是将Ages作为字符串存储 - 考虑可能使用IEnumerable<int>代替?

我最初接近这个答案试图解释可能Ages类型不正确,但我应该解释这是因为三元无法解析为字符串 int?因为那些类型不相同。只需ToString第一个年龄就可以解决编译错误。

答案 1 :(得分:1)

三元运算符期望两个输出都是相同的类型。使用以下内容:

Ages = m.RelatedMultipleWorks.Count == 0 ? m.RelatedLook.Age.ToString(): m.RelatedLook.Age.ToString() + " | " + m.RelatedMultipleWorks.Select(z => z.RelatedLook.Age.ToString()).Aggregate((current, next) => current + " | " + next),