while循环语法解释

问题描述 投票:2回答:3

在研究XSD验证时正在阅读this。碰到了这段代码。

private static IEnumerable<ValidationEventArgs> RunValidation(string inputXml, bool includeHelperSchema)
{
    var schemaSet = new XmlSchemaSet();
    schemaSet.Add(schemaUnderTest);

    if (includeHelperSchema)
    {
        schemaSet.Add(helperSchema);
    }

    var readerSettings = new XmlReaderSettings()
    {
        Schemas = schemaSet,
        ValidationType = ValidationType.Schema,
        ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings,
    };

    var events = new List<ValidationEventArgs>();
    readerSettings.ValidationEventHandler += (s, e) => { events.Add(e); };

    using (var reader = XmlReader.Create(new StringReader(inputXml), readerSettings))
    {
        while (reader.Read())
            ;
    }

    return events;
}

有人可以向我解释分号放在这里的目的是什么?

while (reader.Read())
        ;

删除会给出错误“Invalid expression term '}' ; expected”。

c# while-loop xsd
3个回答
4
投票

让我们看看documentation,其中while关键字定义:

while_statement
    : 'while' '(' boolean_expression ')' embedded_statement
    ;

如你所见,while声明必须以;结束。所以,如果embedded_statement是空的,你会得到:

while (boolean_expression)
    ;

代替:

while (boolean_expression)
    embedded_statement
    ;

embedded_statement可以是一行表达式,如Console.WriteLine(){ }括号中的一段代码:

while (boolean_expression)
{
    embedded_statement
}
;

在这里,;没有必要,你可以写简单:

while (boolean_expression)
{
    embedded_statement
}

0
投票

把身体放在while循环中

    while(reader.Read()){ 
    // your code there
    }

0
投票
while (reader.Read());

分号只是导致while循环不断评估reader.Read(),直到它返回false

写这个的另一种方法可能是

var result = reader.Read()
while (result)
{
   result = reader.Read();
}
© www.soinside.com 2019 - 2024. All rights reserved.