Delphi 这个'else'语句在哪里结束?

Delphi 这个'else'语句在哪里结束?,delphi,if-statement,delphi-7,Delphi,If Statement,Delphi 7,试图将Delphi代码的这一部分转换为C#时,我对if/else语句的以下else部分的结束位置感到困惑。下面是代码的确切格式: try Root:=ExtractFileRoot(FileName); ErrorStr:=ExtractFileRoot(FileName)+' invalid name'; if not GetNextNumericSegment(Root,Segment) then exit; if length(Segment) = 4 the

试图将
Delphi
代码的这一部分转换为
C#
时,我对
if/else
语句的以下
else
部分的结束位置感到困惑。下面是代码的确切格式:

 try
   Root:=ExtractFileRoot(FileName);
   ErrorStr:=ExtractFileRoot(FileName)+' invalid name';
   if not GetNextNumericSegment(Root,Segment) then exit;  
   if length(Segment) = 4 then
   begin
      Year:=StrToInt(Segment);
      GetnextNumericSegment(Root,Segment)
   end
   else // Where does this else statement end?
       Year:=Defaultyear;
    ErrorStr:=ExtractFileRoot(FileName)+' invalid';
   if Length(Segment) <> 3 then exit;
   Jday:=StrToInt(Segment);
    ErrorStr:=ExtractFileRoot(FileName)+' Bad File';
   if not GetNextNumericSegment(Root,Segment) then exit;  // bad Time of day
   GetTimeFromFileName:=EncodeDate(Year,1,1)+Jday-1+
                        EncodeTime(StrToInt(Copy(Segment,1,2)),StrToInt(Copy(Segment,3,2)),StrToInt(Copy(Segment,5,2)),0);
 except
       GetTimeFromFileName:=0;
 end;
试试看
Root:=ExtractFileRoot(文件名);
ErrorStr:=ExtractFileRoot(文件名)+“无效名称”;
如果未获取下一个数值段(根,段),则退出;
如果长度(段)=4,则
开始
年份:=stroint(段);
GetnextNumericSegment(根,段)
终止
else//else语句在哪里结束?
年份:=默认年份;
ErrorStr:=ExtractFileRoot(文件名)+“无效”;
如果长度(段)为3,则退出;
Jday:=stroint(段);
ErrorStr:=ExtractFileRoot(文件名)+“坏文件”;
如果不是GetNextNumericSegment(根,段),则退出;//一天中的糟糕时刻
GetTimeFromFileName:=EncodeDate(年份,1,1)+Jday-1+
编码时间(stroint(复制(段,1,2)),stroint(复制(段,3,2)),stroint(复制(段,5,2)),0);
除了
GetTimeFromFileName:=0;
终止
我知道您不必使用begin/end,但到目前为止,我在这段代码中看到的一切都使用了它。我还读到你不需要
部分中出现了code>,并且第一个
else
后面的code>是
else
的结尾

我的猜测是
else
下和
上除
之外的所有内容都是
else
语句的一部分


注意:如果我真的可以调试,这将很容易,但不幸的是,我只是得到了代码片段和函数来转换,而没有真正的上下文

一个
else
分支包含

  • 下一条语句(方法调用、赋值等)

因此,在您的例子中,这是整个
else
分支

Year:=Defaultyear;
旁注:
格式在这里并不重要。这只是为了便于阅读。只有
begin
end
才可以更改
else
分支中的语句量。

我建议阅读文档

Year:=Defaultyear;
之后,else
后面跟着一条语句。每个语句(结构化或非结构化)都可以用分号分隔符
结尾

声明可以是。在这种情况下,它被封装在
开始/结束
构造中

在您的情况下,
else
语句以
Year:=DefaultYear结尾



我建议始终使用“开始/结束”对,即使语句是单行。代码更具可读性,如果您稍后添加一行代码,错误也会更少。

除了上面提到的“阅读文档”之外,如果您需要一个可视化工具来帮助您跟踪Delphi 7中的if/else对和其他内容,我建议您安装Castalia工具。这将对您有很大帮助。

我发现无论有多少语句,始终使用Begin/End都很有用。比如,

If A = 1 then
    Begin
      // Every line here executes if A = 1
      ShowMessage('A does in fact equal 1');
      ShowMessage('These messages can be annoying')
    end 
      else
    Being
      // Everything here executes if A doesn't equal 1
      ShowMessage('A was not equal to 1');
      ShowMessage('This is still an annoying message') 
    End;

else
将在此语句之后结束:
Year:=Defaultyear谢谢!我能问一下这是为什么吗?这是因为格式或其他原因吗?请阅读该语言的文档。没有任何东西可以替代对它的理解。也许会有所帮助。@pfferno-如果您的代码的格式和上面的示例一样糟糕,我建议使用代码格式化程序。旧版本的Delphi没有内置的,但是有几个第三方免费的版本可用-参见FWIW,the
是分隔符而不是终止符。语句后面不一定要有
“始终使用‘开始/结束’对是一个很好的编码标准”,谁说?我认为这是基于观点/口味的。看看Delphi的源代码。@kobik,我看到了太多的错误和误解。使用begin/end是我的建议:-)我个人觉得使用比必要的更多begin/end对的代码更难阅读。如果这句话可以简化为一句话,我个人就不提了。但我同意科比克的观点,这是一种偏好。我理解始终使用begin/end是好的观点,以及为什么,但我认为这会使代码过于冗长。@kobik:看看Delphi源代码通常是一个非常糟糕的想法。它充满了不一致和糟糕的编程习惯,在某些情况下,代码编写得很糟糕。谢谢。我感到困惑的原因是,在另一个代码片段中,有几行的格式与
else
下的下一条语句的空格数相同。我不确定它是要有一个
开始/结束
,还是写它的人只是意外地缩进了行。
If A = 1 then
    Begin
      // Every line here executes if A = 1
      ShowMessage('A does in fact equal 1');
      ShowMessage('These messages can be annoying')
    end 
      else
    Being
      // Everything here executes if A doesn't equal 1
      ShowMessage('A was not equal to 1');
      ShowMessage('This is still an annoying message') 
    End;