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

How do I perform mathematical operation in my String Builder?

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

我应该怎么做?

如果 myfruit.ContestantEndTime 是一个整数那么 int.Parse 会抛出一个错误,因为这个方法需要一个字符串作为参数。如果是这种情况,你不需要在分割之前对它做任何事情,只需使用:

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

如果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,它将 return 只是 4。但是如果你想要额外的秒数,你可以试试这个

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

现在当你在 myFruit.ContestantEndTime 中有 245 时,上面的表达式会给你 4.2

我敢打赌一个或多个参赛者的结束时间存在格式错误。

你需要做的,就是使用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(或任何其他数字类型)?