如何检查结构是否已实例化?

Tom*_*ght 27 c# null struct

我有一个结构(为了这个问题的目的)几乎模仿内置Point类型.

我需要在使用之前检查它是否已经实例化.什么时候Point,我可以这样做:

if (this.p == null)
Run Code Online (Sandbox Code Playgroud)

但现在生成以下错误:

运算符'=='不能应用于'ProportionPoint'和'<null>类型的操作数

如何将我的结构与null进行比较?还有另一种检查实例化的方法吗?

Raw*_*ing 38

A struct是值类型 - 它永远不会为null.

您可以检查default(ProportionPoint),这是结构的默认值(例如,零).但是,对于某一点,可能是默认值 - 原点 - 也是"有效"值.

相反,你可以使用Nullable<ProportionPoint>.

  • 而且,或者特别是缺乏这一点,为什么令人震惊的NHS设施曾经"定位"在加纳以南和加蓬西部. (3认同)

Dar*_*rov 18

结构是值类型,与引用类型相反,它们永远不能为null.您可以检查默认值:

if (this.p.Equals(default(ProportionPoint)))
Run Code Online (Sandbox Code Playgroud)

  • @DarinDimitrov不适合我.运算符'=='不能应用于'Vhdx.RegionTableEntry'和'Vhdx.RegionTableEntry'类型的操作数. (9认同)
  • 请注意,检查默认值将不允许您区分"未初始化"值和"使用默认值正确初始化"值(例如(0,0)) (8认同)
  • 不行.必须使用`Equals`运算符,而不是`==` (4认同)

Hab*_*bib 5

结构体不能为 null。它是值类型,而不是引用类型。您需要检查具有默认值的属性。就像是:

if(p.X == 0 && p.Y == 0)
Run Code Online (Sandbox Code Playgroud)


Tho*_*mar 5

使用可为空的:

ProportionPoint? p1 = null;
if (p1 == null) ...
Run Code Online (Sandbox Code Playgroud)

或者

if (!p1.HasValue) ...
Run Code Online (Sandbox Code Playgroud)