繁体   English   中英

如何编写C#类来测试0和null

[英]How can a C# class be written to test against 0 as well as null

背景:我有一个用C#(2005)编写的自定义类,代码类似于以下内容:

public class Savepoint
{
  public int iOffset;                 /* Starting offset in main journal */
  public u32 nOrig;                   /* Original number of pages in file */
  public u32 iSubRec;                 /* Index of first record in sub-journal */
};

Savepoint sp声明变量后; 我可以测试是否已使用类似于以下代码进行实例化:

if (sp != null) {...}

问题:是否有可能以某种方式重载类运算符,以便我也可以使用以下语法: if(sp){...}if(sp!= 0){...}

PS:除了习惯之外,我没有真正的理由想要写(sp)。

您可以使用默认的属性装饰器在C#中执行此操作,但您不应该这样做。 尝试编写C#就好像是一种鸭式语言会导致各种各样的认知失调。

作为一个经验法则,拥抱你正在使用的语言的白话而不是试图将它塞进一个它从未想过的更熟悉的形状是一个好主意。

我认为你可以为bool添加一个隐式转换......这样的事情应该有效。

public static implicit operator bool(Savepoint sp)
{
    return sp != null;
}

例:

Savepoint sp1 = new Savepoint();
sp1.iOffset = 4;
Savepoint sp2 = new Savepoint();
Savepoint sp3 = null;

Console.WriteLine("sp1: " + (sp1 ? "true" : "false")); // prints true
Console.WriteLine("sp2: " + (sp2 ? "true" : "false")); // prints true
Console.WriteLine("sp3: " + (sp3 ? "true" : "false")); // prints false

C#中的if语句采用布尔表达式,如果表达式是非布尔值,则不会将类型转换为布尔值,这与C(或Javascript)不同。 我的建议是只处理轻微的烦恼并使用标准的C#成语。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM