在 C# 中,有时存在不返回值的代码路径,编译器出错并允许您修复它们很好。然而,有时结构上是一个不存在的地方,但 ALOGIRTHM 会阻止这种结构的发生。
这是一个简单的人为示例。
public static int test1(bool a)
{
if (a) return 1;
if (!a) return 2;
}
当然人们会告诉我,我的“算法”是愚蠢的,我的第二次测试是多余的,我应该这样做。
public static int test1(bool a)
{
if (a) return 1;
else return 2;
}
甚至
public static int test1(bool a)
{
if (a) return 1;
return 2;
}
我特意选择了这个简单的“冗余”示例,而不是我的真实世界算法,因为我想专门关注这个问题,而不是我可以编写算法的 10 种不同的方式 :)
那么有什么可能的方法来处理这个问题,以及每种方法的优缺点是什么。
1) 是我们刚刚介绍的,那就是重构算法。有时这可能是不可能的,或者最终结果可能不符合标准,易于阅读/理解或维护。
其他只是返回一些永远不会发生的东西,比如 null .. 但在这种情况下,我正在处理一个整数,我必须输入 0,这感觉更脏
public static int test1(bool a)
{
if (a) return 1;
if (!a) return 2;
//this code never happens, but i need to keep the compiler happy
return 0;
}
或使用例外
public static int test1(bool a)
{
if (a) return 1;
if (!a) return 2;
throw new Exception("this code never happens, but i need to keep the compiler happy");
}
但是每次我处理这个问题时,无论我采用什么技术,我对结果都不满意并且感觉有点脏。
有替代品吗?