The most obvious difference here between Java and C# is that C# does not have checked exceptions. Most of the time, all this means is that we can drop the throws clause from method declarations.

Try/catch clauses generally translate without trouble. A try clause that declares resources needs a little more care but we hardly use these in Saxon. The syntax for a catch that lists multiple exceptions is a little different, but the conversion rule is straightforward enough.

The main problem is deciding on the hierarchy of exception classes. If the Java code tries to catch NumberFormatException, how should we convert it? What exception will the C# code be throwing in the same situation?

To be honest, I think we probably need further work in this area. Although we're passing 95% of test cases already, I think we'll find that quite a few of the remaining 5% are negative tests where correct catching of exceptions plays a role, and we'll need to give this more careful attention.