public IEnumerable<something> GetStuff(){ foreach(var gzipStream in GetGZips()) { using (var reader = XmlReader.Create(gzipStream,new XmlReaderSettings{ CheckCharacters = false })) { reader.MovetoContent(); while (reader.Read()) //<-- Exception here { //Do stuff yIEld return something; } } }}
我得到一个无效的char异常,处理过程中的一部分:
' ',hexadecimal value 0x19,is an invalID character. line 655,position 45.
鉴于你不允许在try-catch中产生回报 – 在出现错误的情况下,简单地中止当前Xml doc(并完成枚举)的处理有什么好方法?
try / finally并不好 – 因为异常打破了整个IEnumerable的处理.
我无法对文件执行任何预处理.
解决方法 如果你真的无法进行任何预处理,并且绝对必须在解析XML时生成枚举,那么如果用以下内容替换while循环怎么办?bool IsMoreXml = true;while (IsMoreXml){ var ValuesRead = null; //not sure what you're reading try { IsMoreXml = reader.Read(); if(!IsMoreXml) break; //Do Stuff ValuesRead = whateverwereadfromxml; } catch (XmlException ex) { //do what you gotta do break; } if(ValuesRead != null) yIEld return ValuesRead;}
您应该处理其他可能的例外情况,但不确定您是否正在处理调用它的地方.它不优雅,但后来我不确定你的限制是什么(例如,没有预处理)
总结以上是内存溢出为你收集整理的c# – XmlReader异常处理 – IEnumerable全部内容,希望文章能够帮你解决c# – XmlReader异常处理 – IEnumerable所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)