using System.Text.RegularExpressions;
namespace pc.exceptionThrowing
{
class Person
{
private string _firstName = "";
public string FirstName
{
get { return _firstName; }
set
{
_firstName = CheckName(value);
}
}
private string _lastName = "";
public string LastName
{
get { return _lastName; }
set { _lastName = CheckName(value); }
}
private string CheckName(string value)
{
if (Regex.IsMatch(value, @"^[a-zA-Z]{2,}$"))
return value;
throw new FormatException($"{value} is not a valid name");
}
}
class Program
{
static void Main(string[] args)
{
try
{
var p = new Person { FirstName = "Pawel", LastName = "Cicui2as" };
}
catch (FormatException ex) {
Console.WriteLine(ex.Message);
}
}
}
}
In the above example, we create a person class, and when we set the properties we test to see if the values provided are valid, and we throw a format exception if they're not. Our main program then catches those exceptions and handles them. It's important to understand that when an exception is thrown, the normal flow of the program is disrupted, any code after the throw statement will not be executed. It's a best practice to throw an exception as soon as you detect an error, rather than trying to continue executing the method and risk causing further problems, this also simplifies troubleshooting your code, the closer the exception is to the problem the easier it is to debug.
Keep in mind that exceptions should only be thrown in exceptional cases, as they carry some performance overhead. That is not to say that you shouldn't use, but just don't use them for logical flow... because that would be terrible.