Ler*_*ins 5 c# compiler-construction operators
我只是在处理一些代码并发现自己犯了这个错误
if (stringName == "firstName" || "lastName")
// Do code
Run Code Online (Sandbox Code Playgroud)
显然这是错误的,应该是
if (stringName == "firstName" || stringName == "lastName")
// Do code
Run Code Online (Sandbox Code Playgroud)
但它只是让我思考可读性会更容易吗?也许有一些逻辑可以说除非指定一个新的stringName,否则使用第一个?
真的不是一个问题,我只是好奇,如果有一些我不完全理解编译这样的声明背后的逻辑.
Mic*_*tta 11
我觉得你的建议将浑浊的表达解析的规则 - 现在,"=="变成quadreny运营商,而不是二进制一(?).我发现自己错过了SQL的'IN'运算符,并且使用了类似这样的东西:
if (stringName.In("foo", "bar", "baz"))
{
}
// in an extension method class
public static bool In<T>(this T value, params T[] values)
{
return values.Contains(value);
}
Run Code Online (Sandbox Code Playgroud)
Pow*_*ord 10
问题是如果对布尔有效.
stringName == "firstName"
返回一个布尔值.
"lastName"
是一个字符串文字.
||
是一个短路的布尔值或运算符,两侧都有布尔值.
换句话说,你想改变其定义||
通常是一个坏主意.
从理论上讲,你可以让解析器推断出你的意思......但这很快就会变得含糊不清.
if (stringName == firstName || lastName)
Run Code Online (Sandbox Code Playgroud)
看起来不错吧?但究竟什么是lastName?
如果我这样做怎么办?
const bool lastName = false;
Run Code Online (Sandbox Code Playgroud)
而且,与上述逻辑&&
相反||
,但stringName == firstName && lastName
并不相反,事实上也没有意义.