2012-10-02 72 views
1

這看起來很愚蠢 - 一定是我!嵌套的條件運算符?

說我有一個字符串filter["size]" = "g1g"這其實讀「大」,「1」,「GB」

所以

我做了一個測試,看看是否「第一」字符是一個字符,而工作出更大的 我已經做了一個測試,看看「最後」字符是否是一個字符,並計算出它的gb或mb,或者其他任何值都是布爾值。

然後我設置x(cos我越來越寬鬆)到過濾器[「大小」]這是一個字符串的長度。

但是,我來複制中間的最終號碼。

Int64.Parse(filter["size"].Substring(first?1:0,last?(first?x-2:x-1):x)); 

而且它不象嵌套的內嵌IFS ..

Substring(first?1:0,last?(first?x-2:x-1));抱怨說,它缺少的:,這是對的,但頃刻間你加它,它抱怨

Error 1 The best overloaded method match for 'string.Substring(int, int)' has some invalid arguments 

林開始認爲我應該用regexpr解析它,但現在我好奇爲什麼這不起作用。

所以,不相關的可能有很多更好的方法,誰能告訴我爲什麼這些嵌套的內聯ifs不工作?

+1

它們不是「嵌套內聯ifs」 - 它們是條件運算符。如果你包含一些空格,那麼閱讀你的代碼也會更容易...現在,至於實際問題 - 請顯示一個簡短但完整的程序來說明問題。特別是,你沒有告訴我們'x'的類型。 –

+1

嵌套的三元運算符是一個邪惡的,難以理解的混亂。如果您開始考慮使用它們,那麼將代碼分解爲if語句和多行。你爲了清晰而不是極端簡潔得分。 – Quentin

+0

你注意到(正確)你已經錯過了':',但是你沒有解釋*你添加了什麼。例如,如果添加':null',那麼你會得到你描述的錯誤。發佈剩餘的代碼! –

回答

2

您的代碼完全可編輯正如您所描述的那樣,如果可怕的可讀性。填寫您的空白,我想這一點:

int x = 6; 
bool first = false; 
bool last = false; 
var filter = new Dictionary<string, string>(); 
filter.Add("size", "12345697"); 
var result = Int64.Parse(filter["size"].Substring(first?1:0,last?(first?x-2:x-1):x)); 

該代碼產生result被設置爲123456。沒有錯誤,沒有問題。

你周圍的代碼有問題;你的三元表達很好。

+0

現在好了,我難住了。當我在代碼中刪除這行代碼時,其餘部分都很好,沒有任何問題,最後我放棄了最後一個/第一個bools,只是刪除了發現的字符,然後解析了其餘部分。然而,我猜測我永遠不會知道是什麼讓它討厭我所擁有的。謝謝你證明我的邏輯沒錯,只是其他的東西! – BugFinder

3

而且它不象嵌套的內嵌IFS ..

條件運算符:?是不是在你子字符串

完整,我會打破它,你

Substring(
      first 
       ? 1 
       : 0, 
      last 
       ? (first ? x-2 : x-1) 
       : [something] // this is the bit you're missing 
); 
+2

我編輯了這個答案,使結構更清晰 - 但留意評論 - 如果我被要求編碼審查這個,它會直接扔在垃圾箱裏。非常難以理解,令人困惑,並且無法使這些條件內聯。 – tomfanning

+0

你錯過了整條線的第一條線......所以這不是真的 – BugFinder