2016-06-28 59 views
-1

我有這行代碼:無法確定條件表達式的類型,因爲'int?'之間沒有隱式轉換。和「串」

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

只需在第一個'm.RelatedLook.Age'之後添加一個'ToString'。 – juharr

+0

你想要什麼類型的「年齡」? 'm.RelatedLook.Age'是一個'int?',而'm.RelatedLook.Age.ToString()...'是一個'string'。 – haim770

+0

在表達式的同一部分中,根據條件,您曾經分配過一個「int」和「string」,這是不可能的。你應該添加'.TosTring()'到第一個年齡段或者從第二個年齡段中刪除它。取決於你的「年齡」是什麼類型。 –

回答

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), 
1

您的m.RelatedLook.Age大概是int?,但由於.Aggregate,二級三元表達式的結果是string

Ages(推測)預計int?;三元組的後半部分不能被隱含地轉換爲int?,所以編譯器向你大喊。這是假設.Agesint?,否則你應該檢查m.RelatedLook.Age.ToString()的結果。

雖然聲音有點臭,但作爲一個字符串存儲Ages - 考慮可能使用IEnumerable<int>而不是?

我最初走近這個答案試圖解釋,也許Ages類型是不正確的,但我要解釋一下,這是因爲發生三元無法解析這兩個字符串詮釋?因爲這些類型不相同。只要ToString在第一個年齡段將修復編譯器錯誤。

+1

實際上問題是條件運算符的兩部分不匹配,並且沒有共同的隱式轉換。一旦這個問題得到解決,那麼無論什麼類型的「年齡」都可能存在轉換問題,但這不是錯誤信息的含義。 – juharr

+0

這就是我的意思,但我沒有很好地解釋它。我會補充說;謝謝。 –

+0

是的,我想將'Ages'作爲一個字符串存儲,爲什麼我需要'IEnumerable '?謝謝。 – jason

相關問題