如何在String Builder中执行数学运算?

时间:2015-12-14 20:43:23

标签: c# stringbuilder

在我的控制器中,我使用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

3 个答案:

答案 0 :(得分:0)

如果myfruit.ContestantEndTime是一个int,则int.Parse将抛出一个错误,因为此方法将一个字符串作为参数。如果是这种情况,则在分割之前不需要对其进行任何操作,只需使用:

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

答案 1 :(得分:0)

如果myFruit.ContestantEndTime属于int类型,

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

答案 2 :(得分: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(或任何其他数字类型)从一开始?