Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C运算符?:如何在一个表达式中简化基本if语句_C#_Expression_Operator Keyword - Fatal编程技术网

C# C运算符?:如何在一个表达式中简化基本if语句

C# C运算符?:如何在一个表达式中简化基本if语句,c#,expression,operator-keyword,C#,Expression,Operator Keyword,有没有办法简化这个表达式: 我想这样做: d = ( a == "x" ? b : a ) 我可以使用三行代码: d = a; if(a == "x") d = b 我可以在一行代码/一个表达式中完成它,而不使用两次 我可以在一行代码/一个表达式中完成它,而不使用两次 是的,但你真的不应该: d = new[] { a }.Except("x").DefaultIfEmpty(b); 我并不是认真地提出这个建议——只是指出你的标准并不是一个好的可读性指标 如果您发现经常这样做,您可

有没有办法简化这个表达式:

我想这样做:

d = ( a == "x" ? b : a ) 
我可以使用三行代码:

d = a;
if(a == "x")
   d = b
我可以在一行代码/一个表达式中完成它,而不使用两次

我可以在一行代码/一个表达式中完成它,而不使用两次

是的,但你真的不应该:

d = new[] { a }.Except("x").DefaultIfEmpty(b);
我并不是认真地提出这个建议——只是指出你的标准并不是一个好的可读性指标

如果您发现经常这样做,您可以编写一个扩展方法,例如

public static string OrDefaultFor(this string input,
                                  string invalidInput,
                                  string replacement)
{
    return input == invalidInput ? replacement : input;
}
然后:


如果可以,请选择一个更好的名称:

我假设a会引起某种副作用,因此不能使用两次。也许它是一个函数,或者属性,等等

您的第二个代码片段已接近完成,但您希望使用:

d = a;
if(d == "x")
   d = b
关键是在if中使用d,而不是a

如果确实要减少代码行数,可以使用以下方法:

d = a;
if(d == "x") d = b
恭喜你,你现在只剩下两行代码了。除此之外,您试图简化代码的任何操作都可能在某些方面造成弊大于利。正因为如此,该准则的意图非常明确;制作a结果的本地副本,然后通过if确定是否使用a或b


如前所述,问题是错误的,答案更糟。

为变量起更好的名字;我不明白它怎么会比使用条件运算符的版本更简单。进一步“简化”它有什么意义?我怀疑它是否可以。无代码并不是更好的代码。在这种情况下,使用两次密码不会受到惩罚。你真正的问题是什么?我真的很喜欢这个答案,但我不认为这是一个比OP已经提到的更好的方法!!太棒了。不可及性和所有;这个问题不涉及可读性。只是简单化。一个程序员的简单,是另一个程序员的复杂。谁知道简单在这里意味着什么@Rahultripati Jon很清楚这不是一个更好的方法。这只是对问题的回答question@DavidHeffernan:通常simple是readable的同义词,而不是缩写。这将解决副作用,在a的情况下,它是一个进程消耗函数。主要的问题是,一个新的C操作符可以在一行代码中解决这个问题。@user1863603现有的代码非常简单,这是一个相当少见的用例。仅仅为了处理这个例子,不需要引入新的C操作符。如果需要,您可以创建一个函数来执行此操作,但是调用代码不会非常简单,除非您经常使用它,否则会添加比您节省的代码/工作更多的代码/工作。至于您发布的代码示例,它不会编译。@user1863603-冒号在C?:条件运算符中不是可选的。
d = a;
if(d == "x") d = b
d = (d = a) == "x" ? b : d;