2017-12-18 300 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(); 
}