我正在编写一段需要大量 if/then 语句才能工作的代码。为了消除逐行编写 if/then 语句的需要,我可以使用字典或列表吗?如果是这样,有人可以指导我找到一个好的网络资源或展示他们以前做过的实例吗?
编辑
澄清:我有六个输入,每个都是带有一组选择的组合框。以下是输入和选择的详细信息。
(安培)1:1 - 1:12(12 种不同的选择)
(电缆尺寸)2:1 - 2:13(13 种不同的选择)此列表中的某些项目将被第一个输入的选择排除。
(电缆类型)3:1 - 3:2(2 种不同的选择)
(温度等级)4:1 - 4:3(3 种不同的选择)
(系统类型)5:1 - 5:2(2 种不同的选择)
(导管类型)6:1 - 6:2(2 种不同的选择)
上述输入将产生两个输出,它们将出现在两个文本框中。
(电缆数量)7:1 - 7:16(16 个不同的输出)
(导管尺寸)8:1 - 8:8(8 种不同的输出)
我希望这有助于帮助而不是阻碍。
最佳答案
看起来您正在尝试将 6 个输入(12 * 13 * 2 * 3 * 2 * 2 种可能性)的每个组合映射到 (16 * 8) 个输出之一。如果是这种情况,您仍然需要进行大量输入 - 但移动到集合将使您能够轻松地将映射外部化。我猜这可能最适合数据库表:
Amps | CableSize | CableType | TempRating | SystemType | ConduitType | CableQty | ConduitSize
您可以在 6 个输入列上放置一个主键,然后只需执行一个简单的 SELECT:
SELECT CableQty, ConduitSize
FROM Table
WHERE Amps = @amps AND CableSize = @cableSize...etc
要在快速而肮脏的代码中做到这一点,数组可以工作:
const int AMPS = 0; const int CABLE_SIZE = 1; const int TEMP_RATING = 2; // etc.
var mappings = new Dictionary<int[], int[]>(12 * 13 * 2 * 3 * 2 * 2);
mappings.Add(
new int[] { 1, 1, 1, 1, 1, 1 }, // inputs
new int[] { 1, 2 } //outputs
);
// repeat...a lot
var outputs = mappings.First(inputs => {
inputs[AMPS] == myAmps
&& inputs[CABLE_SIZE] == myCableSize
&& inputs[TEMP_RATING] == myTempRating
&& // etc
});
它不会为您节省太多的输入 - 尽管如果有某种逻辑,您可以使用 for 循环等来填充映射 - 但它比 6 页的 if 语句更具可读性(我可能会关闭区域或部分类加载映射)。
关于c# - 不再是 "If/Then";字典使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/475532/