Sfortunatamente MSDN non ha informazioni sulle eccezioni generate da XDocument
e molti altri tipi dallo spazio dei nomi System.Xml.Linq.
Ma ecco come il risparmio realizzato:
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);
}
Se si scavare più a fondo, vedrete che non v'è gran numero di possibili eccezioni. Per esempio. Il metodo XmlWriter.Create
può generare ArgumentNullException
. Quindi crea XmlWriter
che implica la creazione di FileStream
. E qui si può prendere ArgumentException
, NotSupportedException
, DirectoryNotFoundException
, SecurityException
, PathTooLongException
ecc
Quindi, penso che non si dovrebbe cercare di catturare tutta questa roba. Si consideri per avvolgere qualsiasi eccezione in deroga specifica applicazione, e gettarlo ai livelli più alti della vostra applicazione:
public void Write(XDocument outputXml, string outputFilename)
{
try
{
outputXml.Save(outputFilename);
}
catch(Exception e)
{
throw new ReportCreationException(e); // your exception type here
}
}
codice chiamante può solo prendere ReportCreationException
e la sua registrazione, notifica utente, ecc
fonte
2013-06-20 13:25:49