C#可空类型的编码实践
我从未在我的C#代码中使用过可空类型。现在我决定通过在代码中引入可空类型来改变我的编码实践 在应用程序编程中,从普通数据类型过渡到可为空的数据类型时,编码实践中应该做哪些主要更改 应该注意哪些方面C#可空类型的编码实践,c#,nullable,C#,Nullable,我从未在我的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值。