这有什么不对
ViewBag.description.Length > 160 ?
ViewBag.description.Substring(0, 160) :
ViewBag.description;
得到这个错误
System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常但未在用户代码中处理附加信息:运算符'>'不能应用于'string'和'int'类型的操作数
但它不是一个字符串,因为我正在检查长度?
3 回答
您看到的异常类型是described on MSDN:
这表示您的一个字段是
dynamic
. 异常详细信息指定代码的Length > 160
部分导致故障,其中一个操作数是string
而另一个是int
.现在这是关于
dynamic
打字的有趣部分;考虑我有以下代码:e
和d
都保持相同的值,但它们的类型不同 .length1
将编译得很好,我将永远不会发现d
在运行时没有Length
成员,而length2
根本不会编译,因为int
没有名为Length
的成员 .解决方案是在执行
<
操作之前显式地转换左右操作数,在这种情况下,将ViewBag.description
转换为字符串,并在结果上调用.Length
.尝试使用显式强制转换 . 如果
description
是动态的(从您的异常看起来似乎),您可能需要强制转换它 . 如果description
字段的类型为string
,则可以执行以下操作:我这样做是为了让它更具可读性:
Update . 根据@Dale Fraser的评论,我根据他的代码添加了完整的作业 .
我想编译器在遇到块
"Text " + description.Length
时会感到困惑,因为它无法确定后者是三元表达式的一部分 - 也许它被动态混淆了 . 这可以解释您得到的编译器错误 .圆括号应该解决这个问题,因为它们将对三元运算符强制执行更高的评估优先级 . 然后,加号运算符将知道它正在执行字符串连接,因为右操作数将是评估的三元运算符(应该是字符串) .
你能试试这个: