C#中问号(?)的用法总结

简介:
今天看MVC自代的例子时,C#中有两个奇怪的问号: 

  public AccountController(IFormsAuthentication formsAuth, IMembershipService service)
        {
            FormsAuth = formsAuth  ??  new FormsAuthenticationService();
            MembershipService = service  ??  new AccountMembershipService();
        }

网上搜下,总结如下: 

1. 可空类型修饰符(?): 

    引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。 

    例如:string str=null; 是正确的,int i=null; 编译器就会报错。 

    为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?" 

    例如:int? 表示可空的整形,DateTime? 表示可为空的时间。 

    T? 其实是System.Nullable<T>(泛型结构)的缩写形式,也就意味着当你用到T?时编译器编译  时会把T?编译成System.Nullable<T>的形式。 

   例如:int?,编译后便是System.Nullable<int>的形式。 

2. 三元(运算符)表达式(?:): 

   例如:x?y:z 表示如果表达式x为true,则返回y;如果x为false,则返回z,是省略if{}else{}的简单形式。 

3. 空合并运算符(??): 

    用于定义可空类型和引用类型的默认值。如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。 

    例如:a??b 当a为null时则返回b,a不为null时则返回a本身。 

    空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算。



本文转自贺满博客园博客,原文链接:http://www.cnblogs.com/puresoul/archive/2010/08/03/1790979.html,如需转载请自行联系原作者。

目录
相关文章
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
196 1
|
安全 C#
C# List基本用法
C# List基本用法
|
开发框架 .NET 编译器
C# 9.0中的静态匿名函数:引入static关键字的新用法
【1月更文挑战第15天】C# 9.0为匿名函数带来了一个新的修饰符static,允许开发者明确指定匿名函数不会捕获其包含作用域中的任何变量。这一特性增强了代码的性能和可读性,同时减少了因不小心捕获变量而导致的潜在错误。本文将详细探讨C# 9.0中静态匿名函数的语法、使用场景以及它们如何影响代码的性能和安全性。
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
295 0
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
558 0
|
Java C#
C#学习系列相关之多线程(五)----线程池ThreadPool用法
C#学习系列相关之多线程(五)----线程池ThreadPool用法
545 0
|
5月前
|
C#
C# Hashtable的用法
哈希表(HashTable)是一种通过键值对直接访问的数据结构。Add 方法用于添加成员,先检查成员是否已存在,若不存在则计算其 ASCII 码值作为散列值并添加到表中。Remove 方法用于移除成员,Size 方法返回集合成员数量。代码实现了这些功能,确保集合操作的高效性。
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
812 2
|
8月前
|
C#
c#中switch case语句的用法
C#中的 `switch case`语句提供了一种简洁而高效的方式来处理多个条件分支。通过了解其基本语法、注意事项和高级用法,可以在实际开发中灵活运用 `switch case`,提高代码的可读性和维护性。希望本文能帮助你更好地理解和使用C#中的 `switch case`语句。
485 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问