我需要捕获验证器抛出的任何异常,但我无法弄清楚如何应对它。这是我尝试过的代码:
internal static class XMLValidator
{
public static void Validate(XElement elem)
{
string xsdMarkup;
using(var file = new StreamReader(Constants.Xsd))
{
xsdMarkup = file.ReadToEnd();
}
XmlSchemaSet schema = new XmlSchemaSet();
bool valid = true;
schema.Add(XmlSchema.Read(XElement.Parse(xsdMarkup).CreateReader(), (o, e) => { }));
new XDocument(elem).Validate(schema, (o, e) => { valid = false; exception = e; });
if (valid == false)
{
throw exception;
}
valid = true;
}
}
我得到“当前上下文中不存在名称异常”错误。我很确定问题是我没有给出异常数据类型。但是我不知道使用什么类型。
我尝试在异常之前添加var但是它在if语句中没有被重新识别,当然var不能在方法之外声明
然后我尝试将全局豁免声明为字符串并设置为如下所示:
exception = e.ToString();
但是我不能把它扔进if语句。
我将如何做到这一点?
答案 0 :(得分:2)
您正在使用的代理人创建了XmlSchemaValidationException
:
XmlSchemaValidationException exception = null;
new XDocument(elem).Validate(schema, (o, e) => { valid = false; exception = e.Exception; });
if (valid == false)
{
throw exception;
}
答案 1 :(得分:1)
嗯,在这种特殊情况下,你可能想要创建自己的Exception类型来抛出。
public class InvalidDataException : Exception
{ }
(有时在类的定义中做某事是合适的,但在大多数情况下,你真的不需要任何东西。)
然后你可以这样做:
throw new InvalidDataException("Error message goes here");
或者,您可以找到一些现有类型的异常,以抛出由标准库或您拥有的异常。