您的位置:首页 > 编程语言 > C#

C# ?? 和 ?: 运算符

2015-07-24 21:33 429 查看

?:条件运算符 根据 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: