A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SUN_Q 中级黑马   /  2013-7-9 21:05  /  2249 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下面图片显示

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

adaf2edda3cc7cd936c6bf693901213fb90e9193.png

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

11 个回复

正序浏览
为了减少可空类型的代码量,遇到null的时候
C#提供了??操作符来获取如果为空的默认值。
回复 使用道具 举报
本帖最后由 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-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
回复 使用道具 举报
楼上说的很对
string a = b?? "-1";
当b为null时 a=-1,否则a=b
回复 使用道具 举报
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”类型的操作数   
        }
---------------------

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
var num = Request["data"] != null ? Request["data"] : "0";
var num = Request["data"] ?? "0";
这两句意思是一样的...

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
如果为null,则运行后面的,否则返回前面的。
例如:obj = obj1 ?? new Object()//等价于:if (obj == null)  obj = new Object();else  obj = obj1

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
还真没见过这种写法~~~学习下!
回复 使用道具 举报
可空类型Nullable<T>,?相当于简化语法,??是C#的空接合操作符,可用于引用类型和可空值类型

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
如果 ?? 运算符的左操作数非 null,该运算符将返回左操作数,否则返回右操作数。
如果iten.Name非空则返回其值,否则返回后面的默认值。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
有这个运算符吗?真没见过
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马