Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#可空类型的编码实践_C#_Nullable - Fatal编程技术网

C#可空类型的编码实践

C#可空类型的编码实践,c#,nullable,C#,Nullable,我从未在我的C#代码中使用过可空类型。现在我决定通过在代码中引入可空类型来改变我的编码实践 在应用程序编程中,从普通数据类型过渡到可为空的数据类型时,编码实践中应该做哪些主要更改 应该注意哪些方面 我应该经常注意的要点是什么?不要使用可空类型,因为它们是您发现的“很酷的新事物”。 在适用和真正有用的地方使用它们 使用它们会带来开销,如果使用不当,它们将不必要地增加代码的复杂性 您还必须小心避免空解引用,因此它们会给使用该代码的程序员带来额外的负担。(在某些情况下,这比解决方法的成本更可取!)我很

我从未在我的C#代码中使用过可空类型。现在我决定通过在代码中引入可空类型来改变我的编码实践

在应用程序编程中,从普通数据类型过渡到可为空的数据类型时,编码实践中应该做哪些主要更改

应该注意哪些方面


我应该经常注意的要点是什么?

不要使用可空类型,因为它们是您发现的“很酷的新事物”。 在适用和真正有用的地方使用它们

使用它们会带来开销,如果使用不当,它们将不必要地增加代码的复杂性


您还必须小心避免空解引用,因此它们会给使用该代码的程序员带来额外的负担。(在某些情况下,这比解决方法的成本更可取!)

我很少使用可空类型。我唯一使用它们的地方是在处理数据库中的空类型时

对于需要值类型的可能无效状态,或者从可能包含列的
null
值的数据库检索数据时非常有用。在我移植到C#的一些旧FORTRAN代码中,无效值为负数或0是很常见的,但这很麻烦,尤其是在数学函数中使用这些值时。使用
Nullable
来显示可能的无效状态要明确得多

值得一提的是,以下内容是相同的:

Nullable<int> myNullableInt;
int? myNullableInt;
Nullable myNullableInt;
智力?myNullableInt;

关于使用可空类型,还有两个好主意:

  • 不要忘记语法的灵活性<代码>可为空与
    int?
  • 检查null(
    var.HasValue
    )并将其强制转换为基类型,然后再将其用作基类型

它们似乎适用于某些值类型变量的起始值

int? lastCodeReceived;

if (lastCodeReceived.HasValue)
{
    // At least one code has been received.
}

此外,我发现以下属性很有用:

public bool? IsHappy { get; set; }

这允许我有一个三态布尔值:是,否,未回答。

这绝不是一个好主意。因为没有人知道.net framework中会发生什么变化,可能是变化完全基于可空类型。@JMSA:我不明白你想说什么。+1。可空类型在您需要时非常有用,但Jason的观点是正确的,即避免让调用方一直需要检查值与空值。如果NULL无效,请考虑抛出异常。提示:不要忘记,数据库中的NULL值由ADO.NET表示为dBuln.Valuy。确保使用DBNull.Value与DB通信,而不是Nullable的null。“在将其用作基类型之前将其强制转换为基类型。”-我不明白您在这里的意思。。。如果你想要这个值,只要使用'var.value',或者如果你已经检查过它有一个值,甚至可以使用'var';您的意思是当将其分配给基础类型的新变量时?是的。也就是说,在将值放入int之前,请始终检查以确保您的Nullable具有as值。