运算符? 与 ??

1. Nullable<T> 泛型结构

可空类型:

  对于一个类型,如果既可以给它分配一个值(value),也可以给它分配空引用(null),我们就说这个类型是可空的。

  因此,可空类型可表示一个值,或表示不存在任何值。

  例如,类似 String的引用类型就是可空类型,而类似 Int32 的值类型不是可空类型。

  由于值类型的容量只够表示适合于该类型的值,因此它不可为空;值类型没有表示空值所需的额外容量。

  Nullable 结构支持只将一个值类型用作可空类型,而引用类型本身就是可空的。

  在C#中值类型(int、bool、float、double、struct、enum、and so on)是不能赋值null的,

  而引用类型(string、class、interface、delegate、object、array)是可以的。

  如果确实想在值域上加上null的话,Nullable就派上用场了。T?是Nullable<T>的语法糖。

 

string _String = null; 
object _object = null;
//int _int = 0; or int _int; 
//为int赋值null
int? _int = null; //==> Nullable<int> _int = null;
if (!_int.HasValue)
 {
     _int = -1;
   }
 Console.WriteLine(_int);

 

2.?? 运算符

  ?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。

  如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

  A = A ?? B ; //如果A=null就返回B,如果A!=null就返回A,如果AB两个都是null,那就返回null

  可看作:==> A = A == null ? A : B;

 //string赋值
 //string _string = null;
 string _string = "this string not null";
 _string = _string ?? "this is a string";
 Console.WriteLine(_string);

//int赋值
 int? _intX = null;
 int? _intY = _intX ?? -1;
 Console.WriteLine(_intY);

 

3.=> Lambda 运算符

  Lambda 表达式,必须在 Lambda 运算符 =>(读作goes to)   左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。

 

namespace Lambda
 {
         class Program
         {
          delegate int del(int intput);
          static void Main(string[] args)
          {
              del myDelegate = x => (x * x);
              Console.WriteLine(myDelegate(8));//64
          }
      }
 }

 

posted on 2014-02-11 18:08  Aidou_dream  阅读(385)  评论(0编辑  收藏  举报

导航