-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 に答える