在C#中使用可空类型

Mar*_*own 9 c# nullable

我只是对人们的意见感兴趣.在C#中使用可空类型时,测试null的最佳实践方法是什么:

bool isNull = (i == null);
Run Code Online (Sandbox Code Playgroud)

要么

bool isNull = !i.HasValue;
Run Code Online (Sandbox Code Playgroud)

同样,当分配给非null类型时:

long? i = 1;
long j = (long)i;
Run Code Online (Sandbox Code Playgroud)

优于:

long? i = 1;
long j = i.Value;
Run Code Online (Sandbox Code Playgroud)

Sei*_*iti 15

我会用这个:

long? i = 1;
...some code...
long j = i ?? 0;
Run Code Online (Sandbox Code Playgroud)

这意味着,如果inull,则将分配0.

  • @Ed Swangren,Professional .net程序员应该知道null合并运算符是什么.就像我期望C开发人员知道位移运算符一样.不要编写那些没有学过东西的程序员的最低分区. (3认同)

mac*_*nir 12

使用C#团队专门为您实现的表单.如果有人反对,告诉他们安德斯说没关系.

我轻蔑地说,很多工作都是将可空类型集成到c#中,以便为您提供良好的编程体验.

请注意,就性能而言,两种形式都会编译为相同的IL,即:

int? i = 1;
bool isINull = i == null;
int j = (int)i;
Run Code Online (Sandbox Code Playgroud)

在C#编译器完成之后,这样结束:

int? i = 1;
bool isINull = !i.HasValue;
int j = i.Value;
Run Code Online (Sandbox Code Playgroud)


phi*_*red 8

我总是使用(i == null)表单.它表达了你在做什么.

WRT第二个问题,我认为任何一种形式都没问题.但是我总是首先检查它是否为null并采取适当的操作 - 也许在辅助方法中包装该检查和操作(通常它只是设置一个默认值).