I’m looking at creating a helper method to set an exception’s message, automatically setting String.Format, adding in inner exceptions, setting commandline exit codes, etc; something like:
public static void MyExceptionHelper(ExitCode code, string message) {}
public static void MyExceptionHelper(ExitCode code, Exception e) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message, params object[] args) {}
// etc...
The BCL has got a few static classes around that does that sort of thing (eg System.ThrowHelper in mscorlib).
Where is the best place to put these? As overloaded constructors on the exception, in a separate static class (like the BCL), as static methods on the exception itself, or somewhere else?
For methods like this, I prefer overloaded constructors. You’re clearly using it to create a new object, and that’s what a constructor is for.
Once you get into the world of static methods, it’s not always clear where they should end up. You’ll need to analyze who will use them and how they will be used, then examine the pros and cons of each potential location. Then, you will know where to put them.