分配的值从未使用过.Delphi bug还是代码bug?

Sha*_*deh -1 delphi

此代码是我在我的应用程序中使用的第三方组件的一部分.我正在尝试解决与我的应用程序中的提示相关的所有可能问题.但我无法理解这一点.Delphi Compiler标记了这段代码的第一行,提示"分配给NewState的值从未使用过!我只是想了解情况

  NewState := STATE_UNCHECKED;   //Value assigned never used?Really?
  while ( Node <> nil ) and ( Node.Parent <> nil ) do
  begin
    Node := Node.Parent.GetFirstChild;
    CheckedCount := 0;
    UnCheckedCount := 0;
    while True do
    begin
     ....
      if ( Node.StateIndex = STATE_PARTCHECKED ) or
         ( ( CheckedCount > 0 ) and ( UnCheckedCount > 0 ) ) then
      begin
        NewState := STATE_PARTCHECKED; ///assign value on condition
        Break;
      end;

      if Node.GetNextSibling = nil then
      begin
        if CheckedCount > 0 then
          NewState := STATE_CHECKED //assign value on condition
        else
          NewState := STATE_UNCHECKED;
        Break;
      end
      else
        Node := Node.GetNextSibling;
    end;
    Node := Node.Parent;
    if Node <> nil then
      SetState( Node,  NewState );
  end;
Run Code Online (Sandbox Code Playgroud)

但是当这两个判断都是假的时候必须使用这个值.我错了吗?

 if ( Node.StateIndex = STATE_PARTCHECKED ) or
             ( ( CheckedCount > 0 ) and ( UnCheckedCount > 0 ) ) then
Run Code Online (Sandbox Code Playgroud)

if Node.GetNextSibling = nil then
Run Code Online (Sandbox Code Playgroud)

UPDATE

答案是正确的.只有在为变量分配新值并覆盖第一个值后,Break Statment才会运行.然后从未使用过赋值.

一个最小的,完整的,可验证的例子:

procedure TForm1.btn1Click(Sender: TObject);
Var x,y,z,k:integer;
begin
   X:=1;
   Y:=strtoint(edit1.text);
   Z:=Strtoint(edit2.text);
   K:=Strtoint(edit3.text);
     while true do
     begin
      If Z=y*2 then
      begin
        X:=2;
        Break;
      end;

      If Y=3 then
      begin
        If K=7 then
        begin
        X:=3;
        Break;
        end
        else
        begin
        x:=6;
        Break;
        end;
      end
     end;

    showmessage(inttostr(x));

end;
Run Code Online (Sandbox Code Playgroud)

Dsm*_*Dsm 8

如果您突出显示的语句都为FALSE,则while循环继续.退出此循环的唯一方法是分配NewState值.所以编译器是正确的.