-2

我需要捕获验证器抛出的任何异常,但我不知道如何处理它。这是我尝试过的代码:

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 不能在方法之外声明

然后,我尝试将全局豁免声明为字符串并设置为 e,如下所示:

exception = e.ToString();

但是我不能把它扔到 if 语句中。

我该怎么做呢?

4

2 回答 2

2

您正在使用的委托创建一个XmlSchemaValidationException

    XmlSchemaValidationException exception = null;
    new XDocument(elem).Validate(schema, (o, e) => { valid = false; exception = e.Exception; });
    if (valid == false)
    {
        throw exception;               
    }
于 2012-08-27T15:56:57.613 回答
1

好吧,在这种特殊情况下,您可能想要创建自己的异常类型来抛出。

public class InvalidDataException : Exception
{ }

(有时在类的定义内做某事是合适的,但在大多数情况下你真的不需要任何东西。)

然后你可以做这样的事情:

throw new InvalidDataException("Error message goes here");

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

于 2012-08-27T15:56:32.543 回答