gpt4 book ai didi

c# - 检查 Func<> 调用中是否被零除

转载 作者:太空狗 更新时间:2023-10-30 01:35:44 24 4
gpt4 key购买 nike

我正在尝试使用动态数学运算符处理二维数组。

这是有问题的方法:

public float[,] Calculate(int[,] a, int[,] b, Func<int,int,float> compute)
{
int columns = a.GetLength(0);
int rows = a.GetLength(1);
float[,] result = new float[columns,rows];

for(int i = 0; i < columns; i++)
{
for(int j = 0; j < rows; j++)
{
result[i,j] = compute(a[i,j], b[i,j]);
}
}
return result;
}

这个方法是这样调用的:

int[,] a = new int[2,3] { {2, 6, 19}, {3, -4, 25}};
int[,] b = new int[2,3] { {12, -2, 11}, {1, -11, 0}};

//1
float[,] c = Calculate(a, b, (x,y) => (x+y));
//2
float[,] c = Calculate(a, b, (x,y) => (x-y));
//3
float[,] c = Calculate(a, b, (x,y) => (x*y));
//4
float[,] c = Calculate(a, b, (x,y) => (x/y));

现在,虽然版本 1 到 3 可以完美运行,但版本 4 迟早会抛出异常。现在处理这个问题的一种方法是使用 try catch block :

try 
{
result[i,j] = compute(a[i,j], b[i,j]);
}
catch(DivideByZeroException ex)
{
result[i,j] = 0;
}

这看起来像我使用 try catch 来进行流量控制,我宁愿避免它(另外,结果是错误的)。有没有办法检查函数调用中的除法运算符,如果运算符是 /,检查第二个数组是否包含 0 并只返回 null?

最佳答案

通常的流量控制呢? if 语句?

float[,] c;

if (b != 0)
c = Calculate(a, b, (x,y) => (x/y));
else
c = 0;

关于c# - 检查 Func<> 调用中是否被零除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com