解析类型后加问号和双问号

变量定义中类型后带一个问号,意思是这个数据类型是NullAble类型的。用于给变量设初值的时候,给变量(int类型)赋值为null,而不是0!

例子:

int? i = 3 等同于Nullable<int> i = new Nullable<int>(3);

int?是泛型Nullable<int>的另一种写法。

在定义方法的时候允许传null值:

public  void  AddUser( string  name, string  password, int ? role)
{
    //内容略...
}  

//使用
AddUser("小明" , "123456" , null ); //默认null为未审核用户
AddUser("小王" , "123456" ,1); //管理员
AddUser("何问起" , "123456" ,2); //普通用户
view plaincopy to clipboardprint?
public void AddUser(string name,string password,int? role)
{
    //内容略...
}  

//使用
AddUser("小明","123456",null);//默认null为未审核用户
AddUser("小王","123456",1);//管理员
AddUser("何问起","123456",2);//普通用户  

2.  变量定义中类型后带两个问号, 用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值,否则跳过!意思是取所赋值??左边的,如果左边为null,取所赋值??右边的。

例子:    page ?? 0,表示page为null的时候,取右边的值0.

推荐:http://www.cnblogs.com/roucheng/p/3562327.html

时间: 2024-12-15 06:47:21

解析类型后加问号和双问号的相关文章

C#中单问号(?)和双问号(??)的用法整理

1.单问号(?) 1.1 表示Nullable类型 C#2.0里面实现了Nullable数据类型 //A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者是不可以为null的值类型. private int getNum = null; //B.如果修改为下面的写法就可以初始指为null,在特定情况下?等同于基础类型为Nullable. private int? getNum = null; private Nullable<int> getNum

可空值类型(类型后面加问号)

很多时候经常遇到类型后面加问号?如int? i=null,不知道标示什么,其实这是2.0的新语法:可控制类型. 由于一个值类型变量永远不可能为null,而数据库中的一个列是允许值为空的,为了与数据库中的列相对应,CLR引入了可空值类型. C#中是以问号表示法声明并初始化可空值类型的,如下代码所示: int? x=5; int? y=null; C#允许对可空值类型进行数据转换和转型,示例代码如下: int? x=5; int z =(int)x; 可以对可空值类型进行装箱.其规则是:若可空值类型

C#中,为什么在值类型后面加问号

在C#中,声明一个值类型或引用类型的变量,无论是否给这个变量赋初值,该变量都有默认值: 比如声明引用类型变量: string a,其等效于string a = null,string的默认值为null.比如声明值类型变量:int a, 其等效于int a = 0,int的默认值为0. 为什么需要让值类型可以为null? 来看需要让值类型为null的场景: 在数据库中,通常值类型允许为null,比如int, decimal, DateTime类型允许为null,而如果C#中对应的值类型不能为nul

类或方法名后加&lt;&gt;

声明类型为泛型. 说明传递的参数为泛型,而不仅仅是一种类型. public void aa<T>(T a) { Console.WriteLine(a); } 调用时可写: this.aa<int>(5); this.aa(string)("aaaa"); C#变量类型后面加?是什么意思? 例如:int? id = null;string? name = null;还有如: public int?[] InsertTest(int? parentId, stri

优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!

最近对Activiti做了一些深入的研究,对Activiti的流程机制有了些理解,对动态调整流程也有了一些实践方法. 现在好好总结一下,一来是对这段时间自己辛苦探索的一个记录,二来也是为后来者指指路~~~ 如下内容准备采用QA的方式写,很多问题都是当初自己极疑惑的问题,希望能为大家解惑! Q:可以动态调整流程吗? A:可以!可以动态更改流程指向,或者创建新的节点,等等... Q: 更改流程还需要注意什么? A: 必须要实现持久化!否则一旦应用重启,你的流程就犯糊涂了!譬如,你创建了一个新节点,但

.NET 用 Unity 依赖注入&mdash;&mdash;注册和解析类型

Unity Unity Application Block (Unity)是一个轻量级的,可扩展的依赖注入容器,它支持构造函数注入,属性注入和方法调用注入.它为开发人员提供了以下优点: 提供简化的对象创建,特别是层级对象结构和依赖,简化应用程序代码: 支持需求抽象:这可以让开发者在运行时或是配置文件指定依赖,简化横切关注点(crosscutting concerns)的管理: 通过延迟组件配置到容器,增加了灵活性: 具有服务定位器功能:这可以让客户存储或缓存容器.对 ASP.NET Web 应用

[Reprint]C++函数前和函数后加const修饰符区别

c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostream> 02   03 using namespace std; 04   05 // Ahthor:  过往记忆 06 // E-mail:  [email protected] 07 // Blog:    http://www.iteblog.com 08 // 转载请注明出处 09   10

Cookie-Parser是怎样解析签名后的cookie的(同一时候对cookie和cookie-signature进行说明)

第一步:我们来学习一下cookie-signature: var cookie=require('./index'); var val = cookie.sign('hello', 'tobiiscool'); console.log(val); //打印hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI var unsign=cookie.unsign(val, 'tobiiscool') console.log(unsign); //打印hel

&quot;运行时&quot;如何解析类型引用

先将下面的代码保存到文本中,存放到一个目录下面,E:\aa.txt public sealed class Program{ public static void Main(){ System.Console.WriteLine("Hi"); System.Console.Read(); } } 编译上面的文本文件:         Program.exe是一个托管PE文件,由4个部分构成:PE32(+)头.CLR头.元数据以及IL.运行Program.exe时,CLR会加载并初始化它