C#中的??是什么意思

 我来答
生活畅谈者
高能答主

2020-07-18 · 生活新鲜事,看我就知道
生活畅谈者
采纳数:418 获赞数:344732

向TA提问 私信TA
展开全部

可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。例如string str=null; 是正确的,int i=null; 编译器就会报错。

为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?"
例如:int? 表示可空的整形,DateTime? 表示可为空的时间。

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

扩展资料:

C#使用注意事项:

类成员的访问权限:

1、Public:允许外界访问。

2、Private 不允许外界访问,也不允许派生类访问。

3、Protected:不允许外界访问,但允许派生类访问。

4、Internal:允许同一个命名空间中的类访问。

5、在while括号后面不要加分号,因为加分号后,就表示while语句中的循环体代表空语句。不过有时可以将while语句的循环体中的语句放在while后面的括号中去,这时就可在while括号后面加上一个分号。

参考资料来源:百度百科-c#

志远823
推荐于2018-04-29 · TA获得超过2296个赞
知道小有建树答主
回答量:913
采纳率:66%
帮助的人:1170万
展开全部
如果不赋予初值,C#的变量是不允许直接使用的。
但有的时候,让值的类型为空是非常有用的,
比如三态bool,其中一个状态便是未给定值。

泛型使用System.NullAble<T>提供了类型值为空的一种方式。
System.NullAble<T> nullAbleInt;
因为太常用,C#特意给了一个语法快捷
int? nullAbleInt;
简单的例子:
int? nVal1 = new int?();
int? nVal2 = null;
int? nVal3 = 3;
Console.WriteLine(nVal1); // 输出null
Console.WriteLine(nVal2); // 输出null
Console.WriteLine(nVal3); // 输出3

原则:null与任何数数学运算结果为null,null bool 操作任何值结果为 null。

为了减少可空类型的代码量,遇到null的时候
C#提供了??操作符来获取如果为空的默认值。
static void Main(string[] args)
{
int? nVal1 = null;
int? nVal2 = 5;
// nVal1为空,相乘后还是null,输出0作为默认值
Console.WriteLine(2 * nVal1 ?? 0);
// nVal2非空,取计算值输出,输出10
Console.WriteLine(2 * nVal2 ?? 0);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
半边河
2015-09-24 · 有人在前有人在后,保持谦逊、保持低调。
半边河
采纳数:135 获赞数:322

向TA提问 私信TA
展开全部
!在C like语言中的意思是取反的意思。
例如:==这是比较“等于”,"!="就是比较"不等于"
再例如 t = true; !t则表示false.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
greystar_cn
2015-06-10 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
字段和属性是C#面向对象模式中的两个概念。

字段(field) 用来存储数值或对象的真正实体 简单说是私有变量(不一定是私有...)
属性(property) 对字段的封装(也不一定- -) 有get段落和set段落 通常是公开的 通常get段和set段执行过程都是轻量的(这是一个语义约定 也是C#不同于java的地方 重量级 耗时的获取也要用函数来表达而不是属性 java就没这种语义了 一律get- -)

字段和属性都属于类的成员
我说的不一定是因为通常它们是这么用的 但是在不同设计模式和上下文场合 字段的私有会造成取值赋值的效率降低 比如你不得不对一个占用64字节的结构体频繁取值赋值 就用公开字段好了...
属性是个非常奇妙的东西 它包含着写段落和读段落所以又叫读写器 正常的意义是field的wapper 因为你可以通过只写get段或set段 对字段达到只读和只写的访问控制 甚至可以对get和set加上访问权限修饰符 比如protected get; private set;
因为get和set段像是两个函数一样 所以你可以在里面写很多奇怪的东西达到不同的设计期望 比如get里可以先判断if (字段==null ) new() return 字段;的这种单例模式设计 set里则可以加上事件触发和有效性判断等逻辑 所以合理的利用属性这种语法对C#程序设计很重要

字段命名加上下划线是类似匈牙利命名法的要求 表示它是private的
不过因为C#是大小写敏感的 你完全可以对字段采用camel命名法 而对属性采用pascal命名法加以区分 但是vb.net不一样 为了两种语言风格统一 你可以采用下划线的方式进行区分 这只是开发风格的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dengjun9452005
2010-06-12 · TA获得超过655个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:183万
展开全部
这是 .NET3.0以后的新特性 Lambda表达式

RelayCommand(() => this.AddPerson(), () => this.CanAddPerson());

的意思可以翻译为

RelayCommand(参数一, 参数二);
参数一 :() => this.AddPerson()
参数二 :() => this.CanAddPerson()

() => this.AddPerson() 的意思是 一个没有参数的方法,返回 this.AddPerson() 而这个返回值的类型不用指定 系统会自动判断
同理 () => this.CanAddPerson() 就是 一个没有参数的方法返回this.CanAddPerson()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(44)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式