2017-12-18 282 views
2

在研究XSD验证时通过this进行了读取。遇到这段代码。While循环语法说明

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”。

+1

请指出行。 – mmushtaq

+0

更新了问题 – Akshatha

回答

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(布尔表达式) {embedded_statement }',所以不知道它需要以这种方式结束。提供的链接为+1。 – Akshatha

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