这个问题听起来很难听,但是当我检查字符串长度大于零时,VS给我一个错误:
options[j]["pdprice"].ToString().Length > 0
Run Code Online (Sandbox Code Playgroud)
他说:
CS0019:运算符'>'不能应用于'string'和'int'类型的操作数
有人可以解释为什么我不能检查整数长度属性是否大于零?我甚至尝试将整个事件作为int进行投射,但它仍然抱怨.
编辑:
我喜欢下面的答案,并将更改代码.这是原来略微修改为"工作":
newlistitem.Value = options[j][valuefield].ToString() +
((options[j]["pdprice"].ToString().Length > 0 ) ?
"/" + options[j]["pdprice"].ToString() : "" );
Run Code Online (Sandbox Code Playgroud)
是的,它引用了一个旧的DataSet.我们没有时间将解决方案转换为MVC,Linq等,但我们正在努力.:)
Joe*_*orn 12
我不确定你为什么会看到这个特殊的错误.但我可以说你做错了.这是在.Net中检查空字符串的正确方法:
String.IsNullOrEmpty( options[j]["pdprice"].ToString() )
Run Code Online (Sandbox Code Playgroud)
请注意,这不会在任何地方使用">"运算符,因此至少它可能会为您提供更好的错误消息.
我将冒险猜测你的声明代码"稍微修改为工作"意味着这段代码:
newlistitem.Value = options[j][valuefield].ToString() +
((options[j]["pdprice"].ToString().Length > 0 ) ?
"/" + options[j]["pdprice"].ToString() : "" );
Run Code Online (Sandbox Code Playgroud)
实际上看起来像这样:
newlistitem.Value = options[j][valuefield].ToString() +
options[j]["pdprice"].ToString().Length > 0 ?
"/" + options[j]["pdprice"].ToString() : "";
Run Code Online (Sandbox Code Playgroud)
(注意缺少的括号)
此代码产生此错误的原因是由于运算符优先级,将评估的是:
String a = options[j][valuefield].ToString();
Int32 b = options[j]["pdprice"].ToString().Length;
String c = a + b;
Boolean d = c > 0;
String e = "/" + options[j]["pdprice"].ToString();
String f = "";
newlistitem.value = d ? e : f;
Run Code Online (Sandbox Code Playgroud)
通过这种查看方式,a+b将生成一个新字符串,因为向字符串添加内容会将该内容转换为字符串以进行连接.基本上,"xyz"+ 3给出"xyz3".
通过添加括号,您的"轻微修改",您基本上重写了代码来执行此操作:
String a = options[j][valuefield].ToString();
String b = options[j]["pdprice"].ToString().Length;
Boolean c = b > 0; <-- this is different
String d = "/" + options[j]["pdprice"].ToString();
String e = "";
String f = c ? d : e;
String g = a + f; <-- and this
newlistitem.value = g;
Run Code Online (Sandbox Code Playgroud)
注意d第一个代码和c第二个代码之间的区别.您已将字符串的串联移动到其所属的位置以及其他字符串.
因此,如果您想要保留这些表达式,那么您的轻微修改就会起作用,因为它是正确的方法.
接受的答案是一个更好的选择.我的目标是向您解释异常的原因.