1

我不理解以下行中使用的语法,除了它遵循似乎被称为三元运算符的基本结构。

string path = args == null || args.Length == 0 ?
    @"C:\GENERIC\SYSTEM\PATH" :
    args[1];

我是这种语法的新手。有人能帮我把它翻译成真正的英语(或伪代码)吗,就像一个 if 语句可以变成“如果这样然后那样”?

编辑:谢谢大家的回答,你们都非常有帮助。不幸的是,我只能投票给你们中的一个,但我会投票给你们中的一群人!

4

8 回答 8

5

这相当于

string path;
if(args == null || args.Length == 0)
    path = @"C:\GENERIC\SYSTEM\PATH" ;
else
    path = args[1];

您可以将三元运算符分解为此

VariableToStoreResult = BooleanCondition ? ValueIfConditionIsTrue : ValueIfConditionIsFalse
于 2013-10-02T18:52:41.410 回答
4

您看到的是一个特殊的条件运算符,即三元运算符。(是一个很好的教程)

它是这样使用的:

condition ? first_expression : second_expression;

基本上,如果语句为真,则执行第一个表达式,如果不是,则执行第二个。一般来说,它是if/else块的一个小快捷方式,应该只用于小语句。嵌套三元运算符在很大程度上是不受欢迎的。

所以如果args == null || args.Length == 0 Then path = @"C:\GENERIC\SYSTEM\PATH",如果不是,它等于args[1]

它相当于你的标准if

string path;
if(args == null || args.Length == 0)
{
   path = @"C:\GENERIC\SYSTEM\PATH";
}
else
{
   path = args[1];
}
于 2013-10-02T18:52:48.417 回答
1

结构很基础

variable = value;

但现在该值取决于呈现真或假的条件;

variable = condition ? true : false;

条件可以是任何东西,甚至是返回此真或假状态的函数。

您在提交的示例中看到的是组合条件。

string path = args == null || args.Length == 0 ?
    @"C:\GENERIC\SYSTEM\PATH" :
    args[1];

如果“或”中的语句之一为真,则此处条件为真

string path = 

(if "args == null" is true)  OR (if "args.Length == 0" is true) then value = @"C:\GENERIC\SYSTEM\PATH" 
 else
(if both false) then  value = args[1]
于 2013-10-02T19:04:05.813 回答
1

从高到低,这里算符优先

==, ||, ?:,=

所以基本上,你的代码相当于;

string path;
if((args == null) || (args.Length == 0))
{
    path = @"C:\GENERIC\SYSTEM\PATH" ;
}
else
{
    path = args[1];
}

看一眼?: Operator (C# Reference)

条件运算符 (?:) 根据布尔表达式的值返回两个值之一。以下是条件运算符的语法。

condition ? first_expression : second_expression;
于 2013-10-02T19:01:43.453 回答
1

就像 Jon Skeet 在评论中所说的那样,这个运算符称为条件运算符。名称背后的原因是它的工作方式非常类似于 if 语句。它通常被称为三元运算符,因为它是目前唯一具有三个操作数的运算符。

现在,解释:

int myInt = myBool ? valueWhenTrue : valueWhenFalse;

这转化为类似:

int myInt;
if(myBool)
   myInt = valueWhenTrue;
else
   myInt = valueWhenFalse;

重要提示:条件运算符只能用于表达式(并将其本身作为表达式求值),不能用于语句。例如,这是无效代码:

myBool ? DoSomething() : DoSomethingElse();
于 2013-10-02T19:01:51.187 回答
1
string path = "";

if(args==null || args.Length==0)
{
   path = @"C:\GENERIC\SYSTEM\PATH";
}
else
{
   path = args[1];
}

这是一个翻译。三元运算符如下所示:

result = (condition)?firstResult:otherResult

您的三元运算符意味着:如果 args 为 null 或为空 -> 使用默认路径 | else -> 使用来自 args 的路径

于 2013-10-02T18:52:41.163 回答
1

它可以重写为:

string path;

if(args == null || args.Length == 0)
    path = @"C:\GENERIC\SYSTEM\PATH";
else
    path = args[1];
于 2013-10-02T18:53:12.803 回答
1

基本上

如果 args 为 null 或 args 的长度为零
,则
Path = "C:\Generic\System\Path"
否则
Path = args[1]

于 2013-10-02T18:53:25.773 回答