📜  .net core 中的异常含义 - C# (1)

📅  最后修改于: 2023-12-03 15:29:07.733000             🧑  作者: Mango

.NET Core中的异常含义 - C#

在编写C#代码时,异常是不可避免的。.NET Core提供了许多不同类型的异常,每种类型都代表着不同的情况。本文将会介绍.NET Core中的异常类型及其含义。

System.Exception

System.Exception 是 .NET Core 中所有异常的基类。该异常类型表示了所有不同类型的异常都有的共性,比如 Message 属性、StackTrace 属性、InnerException 属性等。

通常,在捕捉异常时,建议使用更具体的异常类型进行捕捉。但是,在某些情况下,您可能需要使用 System.Exception 异常类型来捕捉所有可能引发的异常。

System.ArgumentException

System.ArgumentException 表示一个参数无效。该异常通常发生在以下情况:

  • 参数的值不在允许的范围内;
  • 参数值的类型与期望的类型不符;
  • 参数为 null,但必须为非 null。

在捕捉该异常时,通常需要查看 ParamName 属性来获取无效参数的名称。

以下是抛出 System.ArgumentException 异常的示例程序:

public void DoSomething(string value)
{
    if(string.IsNullOrEmpty(value))
    {
        throw new ArgumentException("The value cannot be null or empty.", nameof(value));
    }
}
System.NullReferenceException

System.NullReferenceException 表示尝试访问 null 对象的成员时所引发的异常。该异常通常发生在以下情况:

  • 引用非法、不正确或过时的对象;
  • 对尚未初始化的对象进行访问。

以下是抛出 System.NullReferenceException 异常的示例程序:

public void DoSomething(object obj)
{
    var value = obj.ToString(); // 如果 obj 为 null,此处会抛出 NullReferenceException 异常。
}
System.ArgumentNullException

System.ArgumentNullException 表示一个参数为 null。该异常通常发生在以下情况:

  • 调用方法时未传入必需的参数;
  • 参数为 null,但必须为非 null。

System.ArgumentException 异常类似,捕捉该异常时,通常需要查看 ParamName 属性来获取 null 参数的名称。

以下是抛出 System.ArgumentNullException 异常的示例程序:

public void DoSomething(string value)
{
    if(value == null)
    {
        throw new ArgumentNullException(nameof(value));
    }
}
System.InvalidOperationException

System.InvalidOperationException 表示对象处于无效状态,不支持当前操作。该异常可能发生在以下情况:

  • 调用了不支持的操作;
  • 调用方法的对象处于不正确的状态。

以下是抛出 System.InvalidOperationException 异常的示例程序:

public class Car
{
    public void StartEngine()
    {
        if(IsOn)
        {
            throw new InvalidOperationException("The engine is already started.");
        }
        
        IsOn = true;
    }
    
    public void StopEngine()
    {
        if(!IsOn)
        {
            throw new InvalidOperationException("The engine is already stopped.");
        }
        
        IsOn = false;
    }
    
    private bool IsOn = false;
}
System.FormatException

System.FormatException 表示字符串格式不正确。该异常通常发生在以下情况:

  • 字符串无法转换为指定的类型;
  • 字符串格式不符合要求。

以下是抛出 System.FormatException 异常的示例程序:

public void DoSomething(string value)
{
    if(!int.TryParse(value, out var intValue))
    {
        throw new FormatException("The value is not a valid integer.");
    }
}
System.IO.IOException

System.IO.IOException 表示输入/输出(I/O)操作过程中发生的异常。该异常通常发生在以下情况:

  • 文件不存在、文件已被删除或无法访问;
  • 硬件故障或网络问题。

以下是抛出 System.IO.IOException 异常的示例程序:

public void DoSomething()
{
    try
    {
        // 在文件不存在时,将会抛出 IOException 异常。
        var lines = File.ReadAllLines("file.txt");
    }
    catch(IOException ex)
    {
        Console.WriteLine("An I/O error occurred: " + ex.Message);
    }
}
System.NotSupportedException

System.NotSupportedException 表示当前系统或语言环境不支持某些操作。该异常通常发生在以下情况:

  • 调用了不支持的操作;
  • 要求的操作与当前系统不兼容。

以下是抛出 System.NotSupportedException 异常的示例程序:

public void DoSomething()
{
    if(Environment.OSVersion.Platform != PlatformID.Unix)
    {
        throw new NotSupportedException("This program can only run on Unix/Linux systems.");
    }
}
小结

.NET Core中提供了多种异常类型,您可以根据实际需求进行选择。在捕捉异常时,建议使用更具体的异常类型,以便更好地处理异常情况。