用于验证器抛出的异常的数据类型?

时间:2012-08-27 15:49:48

标签: c# linq-to-xml

我需要捕获验证器抛出的任何异常,但我无法弄清楚如何应对它。这是我尝试过的代码:

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语句。

我将如何做到这一点?

2 个答案:

答案 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");

或者,您可以找到一些现有类型的异常,以抛出由标准库或您拥有的异常。