黑马程序员技术交流社区

标题: C#中的??是什么意思 [打印本页]

作者: SUN_Q    时间: 2013-7-9 21:05
标题: C#中的??是什么意思
如下面图片显示

adaf2edda3cc7cd936c6bf693901213fb90e9193.png (3.73 KB, 下载次数: 1)

adaf2edda3cc7cd936c6bf693901213fb90e9193.png

作者: zhangcheng5468    时间: 2013-7-9 21:29
有这个运算符吗?真没见过
作者: 黑骏马    时间: 2013-7-10 05:26
如果 ?? 运算符的左操作数非 null,该运算符将返回左操作数,否则返回右操作数。
如果iten.Name非空则返回其值,否则返回后面的默认值。
作者: changweihua    时间: 2013-7-10 07:34
可空类型Nullable<T>,?相当于简化语法,??是C#的空接合操作符,可用于引用类型和可空值类型
作者: 高文咪    时间: 2013-7-10 09:35
还真没见过这种写法~~~学习下!
作者: 高文咪    时间: 2013-7-10 09:40
如果为null,则运行后面的,否则返回前面的。
例如:obj = obj1 ?? new Object()//等价于:if (obj == null)  obj = new Object();else  obj = obj1

作者: 彭家贰小姐    时间: 2013-7-10 09:59
var num = Request["data"] != null ? Request["data"] : "0";
var num = Request["data"] ?? "0";
这两句意思是一样的...
作者: 许大虾    时间: 2013-7-10 10:40
C# 双问号运算表达式
1、单问号(?)
     作用:用于给变量设初化的时候,给变量(int类型)赋为null值,而不是0。
     例子:
        public int a; //默认值为0   
        public int ?b; //默认值为null

2、双问号(??)
     作用:用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值,否则跳过。
       例子:
       public int? b; //默认值为null        public int IsNullOrSkip()
        {
            return b ?? 0; //返回值为0
        }     
错误例子:
        public int b; //默认值为0        public int IsNullOrSkip()
        {
            return b ?? 0; // 错误 运算符“??”无法应用于“int”和“int”类型的操作数   
        }
---------------------
作者: 马晓凤    时间: 2013-7-12 19:00
楼上说的很对
string a = b?? "-1";
当b为null时 a=-1,否则a=b
作者: 孔健    时间: 2013-7-15 12:18
本帖最后由 孔健 于 2013-7-15 13:06 编辑

如果 ?? 运算符的左操作数为 null,该运算符将返回右操作数,否则返回左操作数。
例:
static void Main(string[] args)
{   
    int? nVal1 = null;   
    int? nVal2 = 5;   
    // nVal1为空,相乘后还是null,输出0作为默认值   
    Console.WriteLine(2 * nVal1 ?? 0);
    // nVal2非空,取计算值输出,输出10
    Console.WriteLine(2 * nVal2 ?? 0);
}




参考资料:http://bbs.itheima.com/thread-60055-1-1.html

作者: sxdxgzr@126.com    时间: 2013-7-16 22:11
本帖最后由 sxdxgzr@126.com 于 2013-7-16 22:12 编辑

1可空类型Nullable<T> 其类型定义为
  1. [SerializableAttribute]
  2. public struct Nullable<T>
  3. where T : struct
复制代码
代表一个值类型可以分配null,而引用类型本身就是可以设置为null,Nullable<T>是为值类型设计的。

2如何使用
  eg:声明一个可为空的int类型 Nullable<int> a; 这与int ? a等价。均表示声明一个可为空的int类型。这里声明可为空类型的?
仅仅是一个语法糖。
      

3??是C#的空操作符,可用于引用类型和可空值类型,是为可为空的引用类型或值类型定义默认值的。
  1. class NullCoalesce
  2. {
  3.     static int? GetNullableInt()
  4.     {
  5.         return null;
  6.     }

  7.     static string GetStringValue()
  8.     {
  9.         return null;
  10.     }

  11.     static void Main()
  12.     {
  13.         // ?? operator example.
  14.         int? x = null;

  15.         // y = x, unless x is null, in which case y = -1.
  16.         int y = x ?? -1;

  17.         // Assign i to return value of method, unless
  18.         // return value is null, in which case assign
  19.         // default value of int to i.
  20.         int i = GetNullableInt() ?? default(int);

  21.         string s = GetStringValue();
  22.         // ?? also works with reference types.  
  23.         // Display contents of s, unless s is null,  
  24.         // in which case display "Unspecified".
  25.         Console.WriteLine(s ?? "Unspecified");
  26.     }
  27. }
复制代码
http://msdn.microsoft.com/en-us/library/ms173224.aspx#
作者: 小周学诚    时间: 2013-7-19 09:32
为了减少可空类型的代码量,遇到null的时候
C#提供了??操作符来获取如果为空的默认值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2