C#写一个泛形方法回读函数返回值,若不为0,则报错
时间: 2025-01-05 13:43:29 浏览: 5
在C#中,你可以使用泛型(Generics)和异常处理机制来创建一个回读函数,该函数接受一个类型的参数,并在函数执行成功且结果非零时返回该类型的值,如果结果为零则抛出异常。下面是一个简单的例子:
```csharp
public class ReadBack<T>(where T : struct)
{
public static T GetValueOrDefault(Func<T> function)
{
try
{
return function();
}
catch (Exception ex) when (ex is DivideByZeroException || ex is ArgumentException && ex.Message.Contains("Value cannot be zero"))
{
throw new ArgumentException($"Function returned a zero value for type {typeof(T).Name}.", nameof(function));
}
}
}
// 使用示例:
int result = ReadBack<int>.GetValueOrDefault(() => 5 / 0); // 抛出 ArgumentException
```
在这个`ReadBack`类中,我们定义了一个静态方法`GetValueOrDefault`,它接受一个`Func<T>`类型的参数。`Func<T>`是一个委托,代表可以计算得到T类型结果的动作。在`try-catch`块中,尝试执行传入的函数并捕获可能会发生的除以零等导致值为零的情况。如果遇到这种情况,我们抛出自定义的异常,包含有关返回值类型的信息。
阅读全文