如何在 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.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
值为 240
或 245
,它将 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.ContestantEndTime
是 null
、"foo"
还是 "37281"
,这都有效。而且你可以很容易地找出哪里有错误。
这里真正的问题是...为什么 myFruit.ContestantEndTime
一开始就不是 int(或任何其他数字类型)?
在我的控制器中,我正在使用 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.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
值为 240
或 245
,它将 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.ContestantEndTime
是 null
、"foo"
还是 "37281"
,这都有效。而且你可以很容易地找出哪里有错误。
这里真正的问题是...为什么 myFruit.ContestantEndTime
一开始就不是 int(或任何其他数字类型)?