c# - while循环语法解释

标签 c# while-loop xsd

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

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())
        ;

删除会出现错误“无效的表达式术语 '}';预期”。

最佳答案

让我们看看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
}

关于c# - while循环语法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47862256/

相关文章:

c# - 如何将 List<String> 值作为字符串传递给其他函数

javascript - while 循环的问题

xsd - 如何在 <xs :all>? 中使项目可选

xml - 针对 2 个 XSD 验证简单 XML - XMLCopyEditor

java - 如何匹配两个xml字符串?

c# - geckodriver.exe 不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta

c# - DateTime.CompareTo 实际返回什么整数?

c# - 是否有可能通过反射获得属性(property)的私有(private)二传手?

c# - 如何通过加倍正则表达式中的定界符来转义定界符

c - 程序在分成 2 个程序时可以工作,但在同一个程序中使用时则不行