子串不按预期工作

时间:2012-12-01 20:13:20

标签: asp.net-mvc vb.net

这似乎是一个相当简单的问题,但我不断得到同样的例外,我不明白为什么。

我只能假设它与对VB.NET中子字符串如何工作的误解有关。

以下代码不断抛出ArgumentOutOfRange异常:

    <%=Html.Encode(IIf(item.description.Length > 150, item.description.Substring(0, 150), item.description))%>

现在应该发生的是,如果item.description超过150个字符输出,则前150个输出整个字符串。问题是它不断尝试获取子字符串而不管if语句的结果长度。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

使用If(expression,truepart,falsepart)运算符:IIF运算符尝试计算true和false部分,而If运算符仅尝试计算相关部分。

答案 1 :(得分:2)

当你使用IIF时,你会评估所有的表达式 - 真正的以及错误的“分支”。

这意味着对于长度不足150个字符的字符串,您仍然会调用item.description.Substring(0, 150),从而导致错误。

也许有item.ShortDescription,只能使用普通IF/THEN返回前150个字符。

答案 2 :(得分:0)

尝试使用:

请检查:IIf() vs. If

If(item.description.Length > 150) Then
  item.description.Substring(0, 150) 
Else 
  item.description
End If

OR,

If(item.description.Length > 150, item.description.Substring(0, 150), item.description)