代码之家  ›  专栏  ›  技术社区  ›  rory.ap

为什么在一个空的“while”循环中没有关于可能错误的空语句的警告?

  •  4
  • rory.ap  · 技术社区  · 6 年前

    关于 compiler warning CS0642: "Possible mistaken empty statement" 我明白这一切的意义。例如, FileStream 实例 f 没有使用,所以这可能是一个错误:

    using (var f = File.OpenRead("f.txt")) ; // Possible mistaken empty statement
    

    然而,这 while 陈述 没有 发出警告,即使没有机会 x 等于或大于 3 . 为什么?

    int x = 1;
    while (x < 3) ; // why no warning?
    

    这里有一个例子,警告是存在的,但是 Timer 实例 t 事实上 可以 做点什么,例如,拨回电话:

    using (var t = new Timer((x) => Debug.Print("This"), null, 500, 500)) ; // warning
    

    为什么不一致?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Jeroen Mostert    6 年前

    int x = 1;
    while (x < 3) {}   // no warning
    while (x < 3); {}  // CS0642
    if (x < 3) ;       // CS0642
    using (new object() as IDisposable) ;  // CS0642
    using (new object() as IDisposable) {} // no warning
    for (; x < 3 ;) ;  // empty statement *and* condition is always true, still no warning
    

    ; { } using

    TextWriter x = null;
    using (x) ;  // CS0642
        x.WriteLine();  // whoops, use of disposed object
    

    (Source.)

    true false