运算符??

在sharpdevelop中看到如下一段代码

 1          public   void  StartCoreServices()
 2          {
 3            if (configDirectory == null)
 4                configDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
 5                                               applicationName);
 6            PropertyService.InitializeService(configDirectory,
 7                                              dataDirectory ?? Path.Combine(FileUtility.ApplicationRootPath, "data"),
 8                                              propertiesName);
 9            PropertyService.Load();
10            ResourceService.InitializeService(FileUtility.Combine(PropertyService.DataDirectory, "resources"));
11            StringParser.Properties["AppName"= applicationName;
12        }
注意这个下边红色的运算符
PropertyService.InitializeService(configDirectory,
                                     dataDirectory ?? Path.Combine(FileUtility.ApplicationRootPath, "data"),
                                     propertiesName);
看到后很诧异,从来没有见过,google了一下,也没有任何结果。
测试后发现??的作用类似于三目运算符,相当于(结果1==null)?结果2:结果1
可以看到,结果1这个变量因为要与null比较,故结果1必须为引用类型或者可空值类型
过路的朋友是否有其他见解,请指点

----------------------------------------------------------------------------------------
补充一下:
msdn上说明如下:

如果 ?? 运算符的左操作数非空,该运算符将返回左操作数,否则返回右操作数。

可空类型可以包含值,或者可以是未定义的。?? 运算符定义当可空类型分配给非可空类型时返回的默认值。如果在将可空类型分配给非可空类型时不使用 ?? 运算符,将生成编译时错误。如果使用强制转换,并且当前未定义可空类型,将发生 InvalidOperationException 异常。
http://msdn2.microsoft.com/zh-cn/library/ms173224(VS.80).aspx

另《C#高级编程》中称之为空结合操作符,并且当右操作数不能隐式转换为做操作数时会引发异常。

博问中Klesh Wong 还指出:
??是短路式的
比如
a ?? b ?? c ?? d ?? e ......
左边第一个非null值会被返回,然后表达式会停止往下运算
-------------------------------------------------------------------------------------
补充以上

转载于:https://www.cnblogs.com/Pcant/archive/2007/12/13/993807.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值