C# ?? 和 ?: 运算符

?:条件运算符  根据 Boolean 表达式的值返回两个值之一。 

下面是条件运算符的语法。

condition ? first_expression : second_expression;

condition 的计算结果必须为 true 或 false。 如果 condition 为 true,则将计算 first_expression 并使其成为结果。 如果 condition 为 false,则将计算 second_expression 并使其成为结果。 只计算两个表达式之一。
first_expression 和 second_expression 的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。

条件运算符为右联运算符。 表达式 a ? b : c ? d : e 作为 a ? b : (c ? d : e) 而非 (a ? b : c) ? d : e 进行计算。

无法重载条件运算符。

int a = 6;
int b = 6;
bool isSame = a == b ? true : false;

isSame 的结果为true;


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

可以为 null 的类型可以表示类型的域中的值,或者值可以是未定义的(在这种情况下,值为 null)。 当左操作数具有一个值为 null 的可以为 null 的类型时,可以使用 ?? 运算符的语法表现力来返回适当的值(右操作数)。 如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。 如果使用强制转换,且当前未定义可以为 null 值的类型,则会引发 InvalidOperationException 异常。

class NullCoalesce
{
    static int? GetNullableInt()
    {
        return null;
    }

    static string GetStringValue()
    {
        return null;
    }

    static void Main()
    {
        int? x = null;

        // Set y to the value of x if x is NOT null; otherwise, 
        // if x = null, set y to -1. 
        int y = x ?? -1;

        // Assign i to return value of the method if the method's result 
        // is NOT null; otherwise, if the result is null, set i to the 
        // default value of int. 
        int i = GetNullableInt() ?? default(int);

        string s = GetStringValue();
        // Display the value of s if s is NOT null; otherwise,  
        // display the string "Unspecified".
        Console.WriteLine(s ?? "Unspecified");
    }
}

可以为 null 的类型具有以下特性:

.可以为 null 的类型表示可被赋值为 null 值的值类型变量。 无法创建基于引用类型的可以为 null 的类型。 (引用类型已支持 null 值。)
.语法 T? 是 Nullable 的简写,此处的 T 为值类型。 这两种形式可以互换。
.为可以为 null 的类型赋值的方法与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108。 对于可以为 null 的类型,也可向其赋 null: int? x = null. 值
.如果基础类型的值为 null,请使用 Nullable.GetValueOrDefault 方法返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();
.将 HasValue 和 Value 只读属性用于测试是否为空和检索值,如下面的示例所示:if(x.HasValue) j = x.Value;
   .如果此变量包含值,则 HasValue 属性返回 true;或者如果是 null 则返回 false。
   .如果已赋值,则 Value 属性返回该值。 否则,将引发 InvalidOperationException。
   .HasValue 的默认值为 false。 Value 属性没有默认值。
   .还可以将 == 和 != 操作数用于可为 null 的类型,如下面的示例所示:if (x != null) y = x;
.使用 ?? 算符分配默认值,在将当前值为 null 的可以为 null 的类型赋值给不可以为 null 的类型时,将应用该默认值,如 int? x = null; int y = x ?? -1;
.不允许使用嵌套的可以为 null 的类型。 将不编译下面一行:Nullable<Nullable<int>> n;


Nullable<T> 结构支持

.对于一个类型,如果既可以给它分配一个值,也可以给它分配 null(表示没有任何值),我们就说这个类型是可空的。 默认情况下,所有引用类型,如 String,可以为空,但是,所有值类型,例如 Int32,不能为空。
.在 C# 和 Visual Basic 中,可以通过使用 ? 表示方法在值类型之后标记一个值类型为空。 例如,int? 在 C# 中或 Integer? 在Visual Basic 中声明了可分配 null的整数值类型。
.Nullable<T> 结构支持只将一个值类型用作可以为 null 的类型,因为引用类型本身就是可空的。
.Nullable 类为 Nullable<T> 结构提供补充支持。 Nullable 类支持获取可以为 null 的类型的基础类型,对于其基础值类型不支持泛型比较和相等比较运算的可以为 null 的类型,该类支持对其进行比较和相等比较运算


参考:https://msdn.microsoft.com/zh-cn/library/6a71f45d

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值