Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不再有“如果/那么”;字典的使用?_C#_Dictionary - Fatal编程技术网

C# 不再有“如果/那么”;字典的使用?

C# 不再有“如果/那么”;字典的使用?,c#,dictionary,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种不同选择 系统类型

我正在写一段代码,它需要大量的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不同输出


我希望这能起到帮助而不是阻碍的作用。

您可能想了解一下您对if/the语句所做的工作。如果您只是从一个键获取一个值,那么,是的,字典可能会起作用

Dictionary<string,string> map = new Dictionary<string,string>();

... populate the map with keys...

您可能想了解一下您正在使用if/the语句做什么。如果您只是从一个键获取一个值,那么,是的,字典可能会起作用

Dictionary<string,string> map = new Dictionary<string,string>();

... populate the map with keys...

如果您总是只是获得一个简单的键值查找,那么字典查找可以替换一个长字符串的If-then语句。但是,如果有时您的逻辑比简单的键值查找更复杂,那么您可能必须创建if-then语句和字典查找的混合。有时,这些将被组合成一个逻辑语句


在您的情况下,唯一正确的答案是严格遵循您的业务领域的要求。如果你可以在大部分时间简化字典查找,那么就使用它们。不过,不要太死板,不能选择其中一个。通常,业务逻辑太混乱,无法像那样整齐地排列到位。

如果您总是只获得一个简单的键值查找,那么是的,字典查找可以替换一长串If-then语句。但是,如果有时您的逻辑比简单的键值查找更复杂,那么您可能必须创建if-then语句和字典查找的混合。有时,这些将被组合成一个逻辑语句


在您的情况下,唯一正确的答案是严格遵循您的业务领域的要求。如果你可以在大部分时间简化字典查找,那么就使用它们。不过,不要太死板,不能选择其中一个。通常,业务逻辑太混乱,无法像那样整齐地放在适当的位置。

我实际上建议构建一个对象模型来存储您的设置。这将给你一个机会来封装你的逻辑,关于什么时候有什么选项可用。另一个好处是,您的Amp[1]控件可以绑定到您的设置Container.Amp[1].值,或者以任何方式结束。实际上,我建议您构建一个对象模型来存储您的设置。这将给你一个机会来封装你的逻辑,关于什么时候有什么选项可用。另一个好处是,您的Amp[1]控件可以绑定到您的设置container.Amp[1].值,或者以任何方式结束。

可以进行字典查找,但我认为您描述的问题不可行

大卫·托马斯·加西亚为你的问题提供了一个很好的解决方案。我喜欢这个解决方案,因为它在业务对象中进行了很好的封装,您可以重用它,并且我希望它也能简化您的维护/调试


让对象模型为每个选项列表显示默认列表,然后在选择每个选项时,让较低级别的选项自动筛选。

可以进行字典查找,但我认为您描述的问题不可行

大卫·托马斯·加西亚为你的问题提供了一个很好的解决方案。我喜欢这个解决方案,因为它在业务对象中进行了很好的封装,您可以重用它,并且我希望它也能简化您的维护/调试


让对象模型为每个选项列表显示默认列表,然后在选择每个选项时,自动筛选较低级别的选项。

看起来您正在尝试将6个输入12*13*2*3*2*2的每个组合映射到16*8个输出中的一个。如果是这样的话,您仍然需要进行大量的键入工作,但是移动到集合将允许您轻松地将映射外部化。我想这可能最适合数据库表:

Amps | CableSize | CableType | TempRating | SystemType | ConduitType | CableQty | ConduitSize
在6个输入列上放置一个主键,然后只需执行一个简单的选择:

SELECT CableQty, ConduitSize 
FROM Table 
WHERE Amps = @amps AND CableSize = @cableSize...etc
要在快速脏代码中实现这一点,数组 uld工作:


它不会为您节省太多的输入—虽然如果有某种逻辑,您可以使用for循环之类的方法来填充映射—但它的可读性比我可能会分区或部分类加载映射的6页if语句要好得多。

看起来您正试图映射6个输入的每个组合16*8输出之一的12*13*2*3*2*2可能性。如果是这样的话,您仍然需要进行大量的键入工作,但是移动到集合将允许您轻松地将映射外部化。我想这可能最适合数据库表:

Amps | CableSize | CableType | TempRating | SystemType | ConduitType | CableQty | ConduitSize
在6个输入列上放置一个主键,然后只需执行一个简单的选择:

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语句要高得多,我可能会对映射进行分区或部分类加载。

您有没有一个我们可以使用的好例子?我会尝试;我只是希望我能把它写在有意义的地方。如果示例代码部分不起作用,那么就您试图解决的问题再详细一点怎么样?还没有代码,我还没有找到方向,对不起。我确实发布了一些附加信息;看下面。你有一个好的例子,我们可以一起工作吗?我会试试;我只是希望我能把它写在有意义的地方。如果示例代码部分不起作用,那么就您试图解决的问题再详细一点怎么样?还没有代码,我还没有找到方向,对不起。我确实发布了一些附加信息;请看下面。我已经为此创建了一个excel表格。您在excel中具体做什么?您是否在Excel中记录对象模型?或者使用Excel进行持久化?我已经为此创建了一个Excel工作表。您在Excel中具体做什么?您是否在Excel中记录对象模型?或者使用Excel进行持久化?数据库表;那是外部文件吗?我不会使用.mdb文件,是吗?是的,mdb可以解决这个问题。这可能会让非程序员,提出这些映射的人,在不改变代码的情况下改变映射。好的,我想我有一个明确的方向,这就是我想要的。我欢迎任何其他意见或建议。我将在尝试实现解决方案时更新此线程。谢谢。马克,你展示的数组,是多维数组吗?在过去的几天里,我对这个问题做了一些更深入的研究。我制作了一份excel电子表格,其中显示了数据库表中可能性的完整地图;那是外部文件吗?我不会使用.mdb文件,是吗?是的,mdb可以解决这个问题。这可能会让非程序员,提出这些映射的人,在不改变代码的情况下改变映射。好的,我想我有一个明确的方向,这就是我想要的。我欢迎任何其他意见或建议。我将在尝试实现解决方案时更新此线程。谢谢。马克,你展示的数组,是多维数组吗?在过去的几天里,我对这个问题做了一些更深入的研究。我制作了一份excel电子表格,显示了可能性的完整地图