Tag: 条件运算符

返回types'?:'(三元条件运算符)

为什么第一个返回一个引用? int x = 1; int y = 2; (x > y ? x : y) = 100; 而第二个不? int x = 1; long y = 2; (x > y ? x : y) = 100; 实际上,第二个根本没有编译 – “左派不是左派”。

三元运算符是一个if-else块的两倍?

我到处读到,三元运算符应该比其相当的if – else块更快,或者至less相同。 但是,我做了以下testing,发现情况并非如此: Random r = new Random(); int[] array = new int[20000000]; for(int i = 0; i < array.Length; i++) { array[i] = r.Next(int.MinValue, int.MaxValue); } Array.Sort(array); long value = 0; DateTime begin = DateTime.UtcNow; foreach (int i in array) { if (i > 0) { value += 2; } else { value […]

如何使用条件三元运算符在lambdas之间有条件地分配Func <>?

通常,使用条件运算符时,语法如下: int x = 6; int y = x == 6 ? 5 : 9; 没有什么特别的,挺直的。 现在,让我们尝试在将Lambda分配给Functypes时使用它。 让我解释: Func<Order, bool> predicate = id == null ? p => p.EmployeeID == null : p => p.EmployeeID == id; 这是相同的语法, 应该工作? 对? 由于某些原因,不。 编译器给出了这个不错的信息: 错误1无法确定条件expression式的types,因为“lambdaexpression式”和“lambdaexpression式”之间没有隐式转换 然后,我继续前进,改变语法,并以这种方式工作: Func<Order, bool> predicate = id == null ? predicate = p […]

Java条件运算符?:结果types

我对有条件的操作符有点困惑。 考虑以下两行: Float f1 = false? 1.0f: null; Float f2 = false? 1.0f: false? 1.0f: null; 为什么f1变成空,第二个语句抛出一个NullPointerException? Langspec-3.0 para 15.25 sais: 否则,第二个和第三个操作数分别是S1和S2的types。 假设T1是将装箱转换为S1所得到的types,并设T2是将装箱转换为S2所得到的types。 条件expression式的types是将采集转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的结果。 那么对于false?1.0f:null T1是Float,T2是nulltypes。 但是lub(T1,T2)的结果是什么? 这段15.12.2.7只是有点太… 顺便说一句,我在Windows上使用1.6.0_18。 PS:我知道Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; 不扔NPE。

为什么在C#中这个代码无效?

下面的代码将不能编译: string foo = "bar"; Object o = foo == null ? DBNull.Value : foo; 我得到: 错误1条件expression式的types无法确定,因为没有“System.DBNull”和“string”之间的隐式转换 要解决这个问题,我必须做这样的事情: string foo = "bar"; Object o = foo == null ? DBNull.Value : (Object)foo; 这个演员似乎毫无意义,因为这当然是合法的: string foo = "bar"; Object o = foo == null ? "gork" : foo; 在我看来,当三元分支是不同types的时候,编译器不会自动把值赋给types对象…但是当它们是同一types时,自动装箱是自动的。 在我看来,第一个陈述应该是合法的… 任何人都可以描述为什么编译器不允许这样做,为什么C#的devise者select这样做? 我相信这是合法的Java …虽然我没有证实这一点。 谢谢。 编辑:我要求了解为什么Java和C#处理这个不同的是,在C#中,这使得这个无效的场景下发生了什么。 我知道如何使用三元组,而不是寻找“更好的方法”来编写例子。 […]

PHP中的?:运算符('Elvis运算符')

我今天在一些PHP代码中看到了这个: $items = $items ?: $this->_handle->result('next', $this->_result, $this); 我不熟悉在这里使用的?:操作符。 它看起来像一个三元运算符,但是如果谓词是真的,那么expression式就被省略了。 这是什么意思?

错误:在这个简单的C代码中需要左值吗? (三元分配?)

我有 : #include<stdio.h> int main() { int a=5,b=6; (a>b)?b=a:b=b; // Here is the error return 0; } 但是如果我replace: (a>b)?b=a:b=b; // Error with (a>b)?(b=a):(b=b); // No-Error 我知道lvalue是可以赋值的rvalue ,它与rvalue有什么不同,但为什么extra parenthesis产生差异。

如何在JavaScript中编写内联IF语句?

如何在JavaScript中使用内联if语句? 还有一个内联的else语句吗? 像这样的东西: var a = 2; var b = 3; if(a < b) { // do something }

什么是?在PHP 5.3中?

可能重复: 什么是PHP运算符“?”和“:”调用,它们是做什么的? 从http://twitto.org/ <?PHP require __DIR__.'/c.php'; if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; })) throw new Exception('Error'); $c(); ?> Twitto使用PHP 5.3以来的一些新function: DIR常数 ?:运算符 匿名function 在PHP5.3中,2号是做什么的? 另外,匿名函数是什么意思? 那不是有一段时间了?

比较PHP中的多个值

我想从这里走: if($var == 3 || $var == 4 || $var == 5 || $var =='string' || $var == '2010-05-16') { execute code here } 对此: if($var == (3, 4, 5, 'string', '2010-05-16')) {execute code here } 保持input$ var看起来非常多余,而且我发现它使读起来有点麻烦。 PHP中有这样一个方法来简化它吗? 我在这里读了一篇文章,在使用XQuery时,可以使用=运算符,如$ var =(1,2,3,4,5)等。 谢谢,约翰