在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值会被返回,然后表达式会停止往下运算
-------------------------------------------------------------------------------------
补充以上

posted on 2007-12-13 15:41  绿蚂蚁  阅读(462)  评论(3编辑  收藏  举报