相关信息 '?' C#中的运算符

时间:2015-10-08 09:47:16

标签: c#

有人可以告诉我?String broker = args.Length > 0 ? args[0] : "localhost:5672";中的?.运算符是什么意思。当我阅读this C# Example

时,我偶然发现了它

MSDN Documentation似乎只有关于运营商???[{ uwsgi-2.0.11.2 } » python setup.py install running install using profile: buildconf/default.ini detected include path: ['/usr/lib/gcc/i686-pc-cygwin/4.9.2/include', '/usr/lib/gcc/i686-pc-cygwin/4.9.2/include-fixed', '/usr/include', '/usr/lib/gcc/i686-pc-cygwin/4.9.2/../../../../include/w32api'] Patching "bin_name" to properly install_scripts dir detected CPU cores: 1 configured CFLAGS: -O2 -I. -Wall -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -DUWSGI_HAS_IFADDRS -DUWSGI_ZLIB -DUWSGI_LOCK_USE_WINDOWS_MUTEX -DUWSGI_EVENT_USE_POLL -DUWSGI_EVENT_TIMER_USE_NONE -DUWSGI_EVENT_FILEMONITOR_USE_NONE -DUWSGI_UUID -DUWSGI_VERSION="\"2.0.11.2\"" -DUWSGI_VERSION_BASE="2" -DUWSGI_VERSION_MAJOR="0" -DUWSGI_VERSION_MINOR="11" -DUWSGI_VERSION_REVISION="2" -DUWSGI_VERSION_CUSTOM="\"\"" -DUWSGI_YAML -DUWSGI_SSL -DUWSGI_PLUGIN_DIR="\".\"" -DUWSGI_DECLARE_EMBEDDED_PLUGINS="UDEP(python);UDEP(gevent);UDEP(ping);UDEP(cache);UDEP(nagios);UDEP(rrdtool);UDEP(carbon);UDEP(rpc);UDEP(corerouter);UDEP(fastrouter);UDEP(http);UDEP(signal);UDEP(syslog);UDEP(rsyslog);UDEP(logsocket);UDEP(router_uwsgi);UDEP(router_redirect);UDEP(router_basicauth);UDEP(zergpool);UDEP(redislog);UDEP(mongodblog);UDEP(router_rewrite);UDEP(router_http);UDEP(logfile);UDEP(router_cache);UDEP(rawrouter);UDEP(router_static);UDEP(sslrouter);UDEP(spooler);UDEP(cheaper_busyness);UDEP(symcall);UDEP(transformation_tofile);UDEP(transformation_gzip);UDEP(transformation_chunked);UDEP(transformation_offload);UDEP(router_memcached);UDEP(router_redis);UDEP(router_hash);UDEP(router_expires);UDEP(router_metrics);UDEP(transformation_template);UDEP(stats_pusher_socket);" -DUWSGI_LOAD_EMBEDDED_PLUGINS="ULEP(python);ULEP(gevent);ULEP(ping);ULEP(cache);ULEP(nagios);ULEP(rrdtool);ULEP(carbon);ULEP(rpc);ULEP(corerouter);ULEP(fastrouter);ULEP(http);ULEP(signal);ULEP(syslog);ULEP(rsyslog);ULEP(logsocket);ULEP(router_uwsgi);ULEP(router_redirect);ULEP(router_basicauth);ULEP(zergpool);ULEP(redislog);ULEP(mongodblog);ULEP(router_rewrite);ULEP(router_http);ULEP(logfile);ULEP(router_cache);ULEP(rawrouter);ULEP(router_static);ULEP(sslrouter);ULEP(spooler);ULEP(cheaper_busyness);ULEP(symcall);ULEP(transformation_tofile);ULEP(transformation_gzip);ULEP(transformation_chunked);ULEP(transformation_offload);ULEP(router_memcached);ULEP(router_redis);ULEP(router_hash);ULEP(router_expires);ULEP(router_metrics);ULEP(transformation_template);ULEP(stats_pusher_socket);" *** uWSGI compiling server core *** [gcc] core/utils.o core/utils.c: In function ‘uwsgi_as_root’: core/utils.c:848:4: error: implicit declaration of function ‘initgroups’ [-Werror=implicit-function-declaration] if (initgroups(uidname, uwsgi.gid)) { ^ cc1: all warnings being treated as errors

的信息

4 个答案:

答案 0 :(得分:5)

这是ternary运营商

String broker = args.Length > 0 ? args[0] : "localhost:5672"; 

以上陈述与

相同
if(args.Length > 0)
     broker = args[0];
else
     broker = "localhost:5672"; 

答案 1 :(得分:2)

那不是"?"运营商,它"? :" - 所谓的三元运算符。以下是MSDN

的一个小解释
  

?:运算符可用作if ... else语句的快捷方式。它通常用作较大表达式的一部分,其中if ... else语句会很笨拙

答案 2 :(得分:2)

?运算符本身只不过是if的捷径。让我们举一个例子:

String broker = args.Length > 0 ? args[0] : "localhost:5672"

?意味着是否。因此,所有剩下的都是if部分可以吗?是当时的一部分。并且:将else部分与当时部分分开。

所以要把它们放在一起你也可以写:

String broker;
if (args.Length > 0)
{
    broker = args[0];
}
else
{
    broker = "localhost:5672";
}

如果您使用或不使用它主要是一种品味和代码如何更好的可读性(如果您需要大量的短ifs只是一个接一个?)可以比完全编写的方法更好的可读性)。

答案 3 :(得分:1)

这是ternary运算符,它等于

String broker;

if (args.Length > 0) 
{
   broker = args[0];
}
else
{
   broker = "localhost:5672"
}

但要写得更短。

`test ? expression1 : expression2` 
如果expression1 为真,则

返回test;如果,则<{1}}