2015-12-14 41 views
-1

在我的控制器中,我使用WCF提取一些信息。爲簡單起見我已經把一切都在一個StringBuilder(),並從我的名單重複我的信息通過foreach循環,像這樣:如何在我的字符串生成器中執行數學運算?

var myResult = new StringBuilder(); 

foreach (var myFruit in response.GetContestResult.ContestEndTimes.ToList()) 
    htmlResult.AppendFormat("{0} Avg End Time: {1} <br/>", myFruit.ContestantName, myfruit.ContestantEndTime); 

return myResult.ToString(); 

endTimes顯示爲秒,我想通過將myFruit.CotestantWaitTime通過切換到分鐘60.我試圖將其更改爲:

htmlResult.AppendFormat("{0} Avg End Time: {1} <br/>", myFruit.ContestantName, 
Int32.Parse(myfruit.ContestantEndTime)/60); 

return myResult.ToString(); 

但是,那麼錯誤讀取該字符串的格式不正確,並做了同樣的,即使我將其轉換回像一個字符串:

Convert.ToString(Int32.Parse(myfruit.ContestantEndTime)/60)) 

我該怎麼做?

Proof that ContestantEndTime is a string

+0

排錯在這裏不是在代碼 – Skullomania

+6

你能給我們一個ContestantEndTime的例子嗎?也許這個問題是在解析到一個Int – Vlad274

+0

我改變了我的變量提出問題,並做了一些錯別字 – Skullomania

回答

0

我打賭有一個格式錯誤或更多的參賽者結束時間。

你需要做的是使用Int32.TryParse。 您還應執行null檢查。

foreach (var myFruit in response.GetContestResult.ContestEndTimes.ToList()) 
{ 
    // -1 will imply that there is an error. 
    int parsedTime = -1; 

    if (myfruit.ContestantEndTime != null && 
     Int32.TryParse(myfruit.ContestantEndTime, out parsedTime)) 
    { 
     parsedTime /= 60; 
    } 

    htmlResult.AppendFormat("{0} Avg End Time: {1} <br/>", 
     myFruit.ContestantName, 
     parsedTime); 
} 

這不管是什麼myFruit.ContestantEndTimenull"foo""37281"工作。您可以輕鬆識別出現錯誤的位置。

這裏真正的問題是...爲什麼myFruit.ContestantEndTime不是一個int(或任何其他數字類型)從一開始?

0

如果myfruit.ContestantEndTime是一個整數,那麼int.Parse會因爲這種方法需要一個字符串作爲參數拋出一個錯誤。如果是這樣的話,你就不需要在分割前做任何事情來,並可以只使用:

htmlResult.AppendFormat("{0} Avg End Time: {1} <br/>", myFruit.ContestantName, 
myfruit.ContestantEndTime/60); 
+0

我已經試過了。這給出錯誤''/'不能應用於字符串和int類型的操作數' – Skullomania

+2

這不是真的。如果它是一個'int','int.Parse'不會拋出異常,因爲代碼不會編譯。 –

0

如果myFruit.ContestantEndTimeint型,

htmlResult.AppendFormat("{0} Avg End Time: {1} ", 
            myFruit.ContestantName, myFruit.ContestantEndTime/60); 

如果是string型,使用Convert.ToInt32方法將其轉換爲Int值。

htmlResult.AppendFormat("{0} 3Avg End Time: {1} ", 
        myFruit.ContestantName, Convert.ToInt32(myFruit.ContestantEndTime)/60); 

上述2將生成分鐘的整數表示(不帶提醒)。這意味着,如果您的ContestantEndTime值是240245,它將返回4。但如果你想多秒,你可以試試這個

htmlResult.AppendFormat("{0} Avg End Time: {1}.{2} ", myFruit.ContestantName, 
           myFruit.ContestantEndTime/60, myFruit.ContestantEndTime%60); 

現在,當你在myFruit.ContestantEndTime有245以上的表達會給你4.2

相關問題