C# handles errors with exceptions caught via try/catch/finally. Proper exception handling means catching specific exception types, cleaning up resources (often with using), creating meaningful custom exceptions, and not swallowing errors silently.
