Αν θες οπωσδήποτε παρατηρήσεις:
α) δεν νομίζω ότι απαιτείται το finally clean-up αφού όλα τα objects που χρησιμοποιείς είναι managed.
β) βάλε τα variable declarations και initializations μέσα στο try/catch block ώστε να πιάσεις και τα errors που μπορεί να συμβούν κατά το initialization των variables.
γ) μετέτραψε το sub σε ένα function που να επιστρέφει true ή false αντί να πετάς exceptions. Στην περίπτωση αυτή μπορείς να προσθέσεις μια τελευταία bool παράμετρο στο function που να καθορίζει τι θα κάνεις με τα exceptions.
π.χ. (σε C#)
public bool ValidateXML(Stream xml, Stream xsd, bool throwMeAllExceptions)
{
try
{
<do your stuff>
}
catch (Exception e)
{
if (throwMeAllExceptions)
throw;
else return false;
}
return true;
}
και προσθέτεις και ένα orverload ώστε να είναι optional η bool (νομίζω ότι σε VB μπρορείς να την κάνεις optional με κάποιο keyword)
public bool ValidateXML(Stream xml, Stream xsd)
{
return ValidateXML(xml, xsd, false);
}
δ) αν θες να το κάνεις ακόμα καλύτερο μπορείς να πιάνεις χωριστά τα XMLExceptions από όλα τα υπόλοιπα οπότε αν πρόκειται για Validation πρόβλημα και σου έχει δώσει throwMeAllExceptions = false τότε του επιστρέφεις false για validation errors αλλά του πετάς όλα τα άλλα exceptions δηλαδή
public bool ValidateXML(Stream xml, Stream xsd, bool throwMeAllExceptions)
{
try
{
<do your stuff>
}
catch (XMLException e)
{
if (throwMeAllExceptions)
throw;
else return false;
}
return true;
}
οπότε θα το πιάσεις μόνο αν είναι XMLException. Όλα τα άλλα θα πάνε στους από πάνω handlers. Αντίστοιχα μπροείς να προσθέσεις ένα σκέτο catch{} το οποίοα θα πιάνει όλα τα υπόλοιπα exceptions και θα τα "πνίγει".
αυτά..
rousso