代码之家  ›  专栏  ›  技术社区  ›  Noah

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

  •  2
  • Noah  · 技术社区  · 17 年前

    背景: 我有一个用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 */
    };
    

    在用声明变量之后 保存点sp;

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

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

    PS:除了习惯的力量,我没有真正好的理由想写if(sp)。

    3 回复  |  直到 17 年前
        1
  •  17
  •   Yes - that Jake.    17 年前

    您可能可以在C#中使用默认的属性装饰器来实现这一点,但您不应该这样做。试图把C#写成鸭子式的语言会导致各种认知失调。

        2
  •  4
  •   Aistina    17 年前

    我想你可以给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
    
        3
  •  3
  •   tvanfosson    17 年前

    与C(或Javascript)中不同,C#中的if语句采用布尔表达式,如果表达式为非布尔表达式,则不进行类型转换。我的建议是处理一些小麻烦,使用标准的C#成语。

    推荐文章