C# 模拟抛出 各种类型异常
时间: 2025-01-03 14:44:18 浏览: 9
在C#中,你可以通过编程的方式来模拟或手动引发异常。以下是几种常见的C#异常类型以及如何创建它们:
1. **基本异常类型**:例如`throw new Exception("自定义错误信息")`,这会抛出一个标准的运行时异常,你可以传入自定义的消息。
2. **特定异常类型**:例如`throw new DivideByZeroException()`表示除数为零的情况,`throw new FileNotFoundException("文件未找到")`用于找不到文件的错误。
3. **系统异常**:C#库中提供了一系列预定义的系统异常,如`throw new ArgumentException("无效的参数")`、`throw new ArgumentNullException("参数不能为null")`等。
4. **自定义异常类**:如果需要更复杂的异常处理,可以创建自己的`Exception`派生类,并实例化它。例如:
```csharp
public class CustomError : Exception
{
public CustomError(string message) : base(message) {}
}
// 使用时
throw new CustomError("这是一个自定义错误");
```
在代码中使用`try-catch`语句来捕获并处理这些异常。
相关问题
c#子线程异常如何捕获位置和异常内容
在C#中,如果在一个子线程中发生了异常,想要捕获并处理这个异常,你需要使用`try-catch-finally`块,并确保主线程知道子线程出错了。下面是一个简单的例子:
```csharp
using System;
using System.Threading;
class Program
{
private Thread workerThread;
private Exception exceptionInfo;
public void StartWorker()
{
try
{
workerThread = new Thread(new ThreadStart(DoWork));
workerThread.Start();
}
catch (Exception ex)
{
// 如果主线程创建线程过程中发生异常,这里会捕获
Console.WriteLine("主线程创建线程时发生异常: " + ex.Message);
exceptionInfo = ex;
}
finally
{
// 主线程始终执行finally块,无论是否抛出异常
}
}
private void DoWork()
{
try
{
// 子线程尝试执行的任务
throw new InvalidOperationException("这是一个模拟的子线程异常");
}
catch (Exception ex)
{
// 在子线程中捕获异常
exceptionInfo = ex; // 更新异常信息
// 可以在这里发送错误通知、记录日志等操作
}
// 注意:在.NET Framework下,若不手动加入Thread.Join(),则主线程会立即结束,不会等待子线程完成
// 在.NET Core中,这不再必要,因为默认情况下主线程会等待所有任务完成
//workerThread.Join();
}
static void Main(string[] args)
{
var program = new Program();
program.StartWorker();
if (exceptionInfo != null)
{
// 如果子线程有异常,主线程会显示异常信息
Console.WriteLine("子线程工作时发生异常: " + exceptionInfo.Message);
}
else
{
Console.WriteLine("子线程工作正常");
}
}
}
```
在这个示例中,如果子线程抛出了异常,`DoWork`方法的`catch`块将捕获它并将异常信息存储到全局变量`exceptionInfo`中。然后在`Main`函数中检查`exceptionInfo`是否存在以判断是否有异常发生。
c#模拟淘宝某种商品的库存量,比如控制库存不能低于10、高于100
在 C# 中,你可以创建一个名为 `StockItem` 的简单类,用于表示淘宝商品的库存。这个类可以包含 `name`、`currentInventory` 和一些基本操作,如增加库存和检查库存是否在合理范围内。以下是此类的一个简单实现:
```csharp
public class StockItem
{
public string Name { get; set; }
private int _currentInventory;
// 初始化库存为100
public StockItem(string name)
{
Name = name;
CurrentInventory = 100;
}
// 获取当前库存
public int CurrentInventory
{
get => _currentInventory;
set
{
if (value >= 10 && value <= 100) // 验证库存范围
{
_currentInventory = value;
}
else
{
throw new ArgumentOutOfRangeException("Current inventory must be between 10 and 100.");
}
}
}
// 增加库存
public void IncreaseInventory(int amount)
{
if (_currentInventory + amount > 100) // 防止超过上限
{
_currentInventory = 100;
}
else
{
_currentInventory += amount;
}
}
// 减少库存
public void DecreaseInventory(int amount)
{
if (_currentInventory - amount >= 10) // 确保不小于最小值
{
_currentInventory -= amount;
}
else
{
throw new InvalidOperationException("Cannot decrease inventory below the minimum limit of 10.");
}
}
}
// 使用示例
var product = new StockItem("Example Product");
product.IncreaseInventory(50); // 正常增加
product.CurrentInventory = 150; // 试图超过上限,会抛出异常
阅读全文