c# - 不再是 "If/Then";字典使用?

标签 c# dictionary

我正在编写一段需要大量 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/

相关文章:

c# - 在 iText 7 中 - 具有相同坐标的段落和矩形不正确重叠

c# - 下拉枚举

function - Scala Map,元组和函数参数列表之间的歧义

C# 字典,键是字符串,值是计数器。近似算法和线程安全

c# - 获取被点击按钮的文本值

c# - 枚举变量的默认值是多少?

c# - 动态创建嵌套转发器控件

python - 换行符 "\n"在编写 .txt 文件 Python 时不起作用

pointers - 接口(interface)作为映射键

perl - split inside map 是如何工作的?