5

私の C# アプリケーションでは、次のステートメントを使用しています。

public void Write(XDocument outputXml, string outputFilename) {
  outputXml.Save(outputFilename);
}

Saveメソッドがスローする可能性のある例外を確認するにはどうすればよいですか? できれば、Visual Studio 2012 または MSDN のドキュメントを参照してください。

XDocument.Saveは参照を提供しません。他の方法、たとえばFile.IO.Open.

4

2 に答える 2

6

残念ながら、MSDN には、 System.Xml.Linq名前空間XDocumentからスローされる例外およびその他の多くの型に関する情報がありません。

しかし、これが保存の実装方法です。

public void Save(string fileName, SaveOptions options)
{
    XmlWriterSettings xmlWriterSettings = XNode.GetXmlWriterSettings(options);
    if ((declaration != null) && !string.IsNullOrEmpty(declaration.Encoding))
    {
        try
        {
            xmlWriterSettings.Encoding = 
               Encoding.GetEncoding(declaration.Encoding);
        }
        catch (ArgumentException)
        {
        }
    }

    using (XmlWriter writer = XmlWriter.Create(fileName, xmlWriterSettings))    
        Save(writer);        
}

さらに深く掘り下げると、考えられる例外が多数あることがわかります。たとえばXmlWriter.Create、メソッドは をスローできArgumentNullExceptionます。それから、創造XmlWriterを伴うものをFileStream創造します。ArgumentExceptionそして、ここでNotSupportedExceptionDirectoryNotFoundExceptionSecurityExceptionPathTooLongExceptionなどをキャッチできます。

ですから、これらすべてのものを捕まえようとするべきではないと思います。アプリケーション固有の例外で例外をラップし、アプリケーションのより高いレベルにスローすることを検討してください。

public void Write(XDocument outputXml, string outputFilename) 
{
   try
   {
       outputXml.Save(outputFilename);
   }
   catch(Exception e)
   {
       throw new ReportCreationException(e); // your exception type here
   } 
}

コードを呼び出すと、キャッチReportCreationExceptionしてログに記録したり、ユーザーに通知したりできます。

于 2013-06-20T13:25:49.923 に答える