I have a line:
string[] cPathDirectories = Directory.GetDirectories(Properties.Settings.Default.customerFolderDirectory);
that will throw the error “Path is not of legal form” if the user didn’t specify a search path (this setting is saved as String.Empty at this point). I would like throw this error to say, “Hey you idiot, go into the application settings and specify a valid path” instead. Is there a way to do this instead of:
...catch (SystemException ex)
{
if(ex.Message == "Path is not of legal form.")
{
MessageBox.Show("Hey you idiot, go into the application settings and specify a valid path","Error");
}
else
{
MessageBox.Show(ex.Message,"Error");
}
}
No, you need to check what the type of the exception is and catch that explicitly. Testing for strings in exception messages is a bad idea because they might change from one version of the framework to another. I’m pretty sure Microsoft doesn’t guarantee that a message will never change.
In this case, looking at the docs you might be getting either a
ArgumentNullExceptionorArgumentException, so you need to test for that in your try/catch block:Which exception you need here, I have no idea. You need to determine that and structure your SEH block accordingly. But always try to catch exceptions, not their properties.
Note the last
catchis highly recommended; it ensures that if something else happens you won’t get an unhandled exception.