您是否发现以下C#代码清晰可辨?
private bool CanExecuteAdd(string parameter) {
return
this.Script == null ? false
: parameter == "Step" ? true
: parameter == "Element" ? this.ElementSelectedInLibrary != null && this.SelectedStep != null
: parameter == "Choice" ? this.SelectedElement != null
: parameter == "Jump" ? this.SelectedStep != null
: parameter == "Conditional jump" ? false
: false.Throw("Unknown Add parameter {0} in XAML.".F(parameter));
}
Run Code Online (Sandbox Code Playgroud)
其中Throw定义为:
public static T Throw<T>(this T ignored, string message) {
throw new Exception(message);
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是惯用的C#.但是,你能在第一眼还是第二眼看到它?还是我偏离了太远?
现在,在你们全都跳过我并说"你们过分担心表演"之前,请说明一点,我更多地出于好奇而不是过分夸大的性质.那说......
我很好奇是否使用&&("和")运算符和嵌套if语句之间存在性能差异.此外,是否存在实际的处理差异?即,&& 总是处理两个语句,或者如果第一个语句失败,它会停止@第一个语句吗?这与嵌套的if语句有什么不同?
要明确的例子:
A)&&("和")运算符
if(a == b && c == d) { ...perform some code fashizzle... }
Run Code Online (Sandbox Code Playgroud)
与B)嵌套的if语句
if(a == b) {
if(c == d) { ...perform some code fashizzle... }
}
Run Code Online (Sandbox Code Playgroud) 我试图在插值字符串中使用条件运算符,但由于它中有冒号,编译器认为在冒号后出现格式字符串.
$"test {foo ? "foo is true" : "foo is false"}";
Run Code Online (Sandbox Code Playgroud)
我该如何使用这种声明?我想到的唯一一件事是这样的:
var fooString = foo ? "foo is true" : "foo is false";
$"test {fooString}";
Run Code Online (Sandbox Code Playgroud) 我想,我把手远离德尔福太久了.在过去的几年里,我一直忙于Java和PHP.现在,当我回到做一点Delphi工作时,我意识到我真的很想念Java和PHP都支持的条件运算符.
在Delphi程序中你会找到多少个这样的行?
var s : string;
begin
...<here the string result is manipulated>...
if combo.Text='' then
s := 'null'
else
s := QuotedStr(combo.Text);
result := result + s;
end;
Run Code Online (Sandbox Code Playgroud)
哪里很简单
result := result + (combo.text='')?'null':quotedStr(combo.text);
Run Code Online (Sandbox Code Playgroud)
就够了 我喜欢这个,它不仅缩短了代码,这样我也避免声明一些辅助s:string变量.
为什么条件运算符不是Delphi的一部分 - 它们是否会得到支持?我注意到2009版Delphi(泛型)有很多语言扩展,为什么不添加这个功能呢?
我对直接赋值和三元条件运算符优先级感到困惑:
#include<stdio.h>
int main(void)
{
int j, k;
j = k = 0;
(1 ? j : k) = 1; // first
printf("%d %d\n", j, k);
j = k = 0;
1 ? j : k = 1; // second
printf("%d %d\n", j, k);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
1 0
1 0
Run Code Online (Sandbox Code Playgroud)
但它碰巧是:
1 0
0 0
Run Code Online (Sandbox Code Playgroud)
另外我得到这个警告:
main.cpp:20:warning:语句无效
这是我评论的第二行.
由于直接赋值运算符的优先级低于三元条件运算符,因此我期望将第一行和第二行注释为等效的行.但实际情况并非如此.
我用g ++ --version(Ubuntu 4.4.3-4ubuntu5)4.4.3尝试了这个
我正在学习来自C#的F#,我刚刚尝试编译一个类似的表达式
let y = Seq.groupBy (fun x -> (x < p ? -1 : x == p ? 0: 1))
Run Code Online (Sandbox Code Playgroud)
但请参阅'表达式中的意外整数文字'.F#有三元运算符吗?如果没有,我应该用什么呢?
我很好奇为什么隐式演员会失败...
int? someValue = SomeCondition ? ResultOfSomeCalc() : null;
Run Code Online (Sandbox Code Playgroud)
为什么我必须执行显式演员
int? someValue = SomeCondition ? ResultofSomeCalc() : (int?)null;
Run Code Online (Sandbox Code Playgroud)
在我看来,编译器具有进行隐式转换决策所需的所有信息,不是吗?
如果你试图找出int是否在数字之间,为什么不能这样做:
if(10 < x < 20)
Run Code Online (Sandbox Code Playgroud)
而不是它,你将不得不这样做
if(10<x && x<20)
Run Code Online (Sandbox Code Playgroud)
这似乎有点开销.
在react中render(),当x的值等于1时,逻辑&&和三元运算符都会显示Hello,并且两者在语法上都是正确的。当我不想显示条件的其他部分时,我总是使用 && ,但我遇到过一个代码库,其中大多数地方都使用带有null 的三元运算符而不是 && 。使用一种方法相对于另一种方法是否有任何性能提升或任何其他优势?
return (
<div>
<div>{x === 1 && <div>Hello</div>}</div>
<div>{x === 1 ? <div>Hello</div> : null}</div>
</div>
);
Run Code Online (Sandbox Code Playgroud) 在像http://en.wikipedia.org/wiki/?这样的页面中:三元/条件运算符?:似乎用于条件赋值.我尝试将它用于方法调用,如下所示:
(condition) ? doThis() : doThat();
Run Code Online (Sandbox Code Playgroud)
两种方法都返回void.Java告诉我这不是一个声明.
所以,我猜我不能做条件方法调用......或者我可以吗?
c# ×3
java ×2
javascript ×2
c++ ×1
coding-style ×1
delphi ×1
delphi-2009 ×1
exception ×1
f# ×1
integer ×1
jsx ×1
nullable ×1
performance ×1
reactjs ×1