为什么这样做:
if ("xx".StartsWith("x"))
{
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
if ("xx" + "xx".StartsWith("x"))
{
}
Run Code Online (Sandbox Code Playgroud)
编译器说错误CS0029:无法将类型'string'隐式转换为'bool'
Cod*_*aos 25
成员访问运算符的.优先级高于+运算符.
检查C#运算符(MSDN)以获取C#运算符优先级.特别是它x.y列为"主要",其高于+"添加剂"中的二进制.
这意味着"xx" + "xx".StartsWith("x")被解释为
"xx" + ("xx".StartsWith("x"))并且不能编译.它汇集a string和a bool给你一个string.但是你不能string在if语句中使用a 作为条件,因为它不是bool(并且也没有实现true运算符)
看起来您希望它被解释为("xx" + "xx").StartsWith("x"))您首先连接字符串然后调用StartsWith组合字符串.
Ant*_*zer 18
因为在第二种情况下,您尝试编译此类代码:
if ("xx" + true)
{
}
Run Code Online (Sandbox Code Playgroud)
Kyl*_*man 16
将它包裹在Parens中
if (("xx" + "xx").StartsWith("x"))
{
}
Run Code Online (Sandbox Code Playgroud)
错误的原因是string加a bool= a string,if语句期望a bool.
因为编译器是第一个评价函数调用,因此他会尽力来连接"xx"带true:
if("xx" + "xx".StartsWith("x")) {
// becomes
if("xx" + true) {
Run Code Online (Sandbox Code Playgroud)
在运行时期间无法进行此隐式转换.您需要告诉编译器首先连接字符串:
if(("xx" + "xx").StartsWith("x")) {
Run Code Online (Sandbox Code Playgroud)
小智 5
它与运营商的优先权有关.在你的情况下,StartsWith返回bool,当与字符串相加时,字符串+ bool不返回bool,它返回一个字符串,而if()期望一个bool.
您可以使用括号更改操作的优先级.
| 归档时间: |
|
| 查看次数: |
1011 次 |
| 最近记录: |