pfi*_*rno 0 delphi if-statement delphi-7
试图将这段Delphi代码转换为,C#并且我else对if/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;
Run Code Online (Sandbox Code Playgroud)
我知道你不必使用开头/结尾,但到目前为止我在这段代码中看到的所有内容都使用了它.我也看了,你不需要;在if语句的一部分,并且第一;后else是底了else.
我的猜测是,根据一切else和达except是金else声明.
注意:如果我可以实际调试,这将很容易,但不幸的是,我只是被给予代码和函数的片段,无需真正的上下文进行转换.
LU *_* RD 10
我建议阅读文件,如果声明.
之后else发表声明.每个语句(结构化或非结构化)都可以用分号分隔符结束;.
声明可以是复合的.在这种情况下,它被包含在一个begin/end结构中.
在你的情况下,else语句结束Year := DefaultYear;
我建议总是使用'end/end'对,即使语句是单行.代码更具可读性,如果您稍后添加一行,则会出现更少的错误.
一个else分支包含
下一个语句(方法调用,赋值等)
if x=5 then
DoThis
else
DoThat; // <-- This is the complete else branch
Run Code Online (Sandbox Code Playgroud)或标有begin和的块end
if x=5 then
DoThis
else
begin // <-- Here starts the else branch
DoThat;
DoSomethingElse;
end; // <-- Here ends the else branch
Run Code Online (Sandbox Code Playgroud)所以在你的情况下,这是整个else分支.
Year:=Defaultyear;
Run Code Online (Sandbox Code Playgroud)
附注:格式化在这里无关紧要.它仅用于可读性目的.只有begin并且end确实会更改else分支内的语句数量.