在研究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
”。
让我们看看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
}
把身体放在while循环中
while(reader.Read()){
// your code there
}
while (reader.Read());
分号只是导致while循环不断评估reader.Read()
,直到它返回false
写这个的另一种方法可能是
var result = reader.Read()
while (result)
{
result = reader.Read();
}