我不明白以下几行中使用的语法,除了它遵循似乎被称为三元运算符的基本结构。
string path = args == null || args.Length == 0 ?
@"C:GENERICSYSTEMPATH" :
args[1];
我是这种语法的新手。有人会帮我把它翻译成真正的英语(或伪代码)吗,就像 if 语句可以变成"如果这个然后那个"一样?
编辑:谢谢大家的回答,你们都非常乐于助人。不幸的是,我只能投票给你们中的一个,但我会投票给你们中的一群人!
相当于
string path;
if(args == null || args.Length == 0)
path = @"C:GENERICSYSTEMPATH" ;
else
path = args[1];
您可以将三元运算符分解为此
VariableToStoreResult = BooleanCondition ? ValueIfConditionIsTrue : ValueIfConditionIsFalse
你看到的是一个特殊的条件运算符,三元运算符。(这里有一个不错的教程)
它的用法是这样的:
condition ? first_expression : second_expression;
基本上,如果语句为真,则执行第一个表达式,如果不是,则执行第二个表达式。一般来说,它是if/else
块的小快捷方式,应该只用于小语句。嵌套三元运算符在很大程度上是不受欢迎的。
所以如果args == null || args.Length == 0
然后path = @"C:GENERICSYSTEMPATH"
,如果不是,它等于args[1]
它相当于您的标准if
块
string path;
if(args == null || args.Length == 0)
{
path = @"C:GENERICSYSTEMPATH";
}
else
{
path = args[1];
}
string path = "";
if(args==null || args.Length==0)
{
path = @"C:GENERICSYSTEMPATH";
}
else
{
path = args[1];
}
这是一个翻译。三元运算符如下所示:
result = (condition)?firstResult:otherResult
您的三元运算符意味着:如果参数为空或空 ->使用默认路径 |否则 -> 使用 args
重写为:
string path;
if(args == null || args.Length == 0)
path = @"C:GENERICSYSTEMPATH";
else
path = args[1];
基本上
如果参数为空或参数长度为零
然后
路径 ="C:\通用\系统\路径"
还
路径 = args[1]
就像Jon Skeet在评论中所说的那样,这个运算符被称为条件运算符。名称背后的原因是它的工作方式非常像 if 语句。它通常被称为三元运算符,因为它是目前唯一具有三个操作数的运算符。
现在,解释:
int myInt = myBool ? valueWhenTrue : valueWhenFalse;
这转化为以下内容:
int myInt;
if(myBool)
myInt = valueWhenTrue;
else
myInt = valueWhenFalse;
重要说明:条件运算符只能用于表达式(并且自身作为表达式进行计算),而不能用于语句。例如,这是无效代码:
myBool ? DoSomething() : DoSomethingElse();
结构非常基本
variable = value;
但现在该值取决于呈现 true 或 false 的条件;
variable = condition ? true : false;
条件可以是任何东西,甚至是返回此真或假状态的函数。
您在提交的示例中看到的是一个组合条件。
string path = args == null || args.Length == 0 ?
@"C:GENERICSYSTEMPATH" :
args[1];
在这里,如果"OR"中的语句之一为真,则条件为真
读
string path =
(if "args == null" is true) OR (if "args.Length == 0" is true) then value = @"C:GENERICSYSTEMPATH"
else
(if both false) then value = args[1]
从高级到低级别,此处运算符优先;
==
、||
、?:
、=
所以基本上,你的代码等同于;
string path;
if((args == null) || (args.Length == 0))
{
path = @"C:GENERICSYSTEMPATH" ;
}
else
{
path = args[1];
}
看看?: Operator (C# Reference)
条件运算符 (?:) 返回两个值之一,具体取决于 布尔表达式的值。以下是 条件运算符。
condition ? first_expression : second_expression;