如何最好地转换 VB6“选择大小写 1067 到 2938...”到 C#?
我正在将一些 VB6 逻辑转换为 C# 并遇到以下 SELECT/CASE 语句。
Select Case ZipCode
Case 1067 To 19417, 35075 To 35085, 48455 To 48465, 55583 To 55596, 67480 To 67551, 75392, 85126, _
93047 To 93059, 21217 To 21739, 35091 To 35096, 48480, 55606 To 55779, 67655 To 67707, 76726 To 76835, _
85221 To 87679, 94315 To 94419, 22844 To 25799, 35102, 48488, 56154 To 56254, 67731 To 67759, 76855 To 76889, _
87719 To 88339, 94428 To 94437, 25868, 35112, 48499 To 48531, 56271, 67824 To 67829, 77761, 88353, 94522, _
25879, 35117, 48653, 56281 To 56299, 69427 To 69429, 77773 To 77776, 88361 To 88364, 94553, 26121 To 26160, _
35216 To 35282, 48720 To 48727, 56321 To 56337, 69437 To 69439, 78048 To 78126, 88368 To 88379, 94559, _
26180 To 26215, 35287 To 35469, 49124 To 49356, 56410 To 56479, 70173 To 71287, 78136 To 79117, 88410, 95028 To 95032, _
26316 To 26389, 35576 To 35768, 49406, 56575, 71332 To 71540, 80331 To 83313, 88481, 95111 To 95152, _
26419, 36110, 49419, 56626 To 56648, 71546 To 71711, 83324 To 83362, 88529, 95176 To 95185, _
26434 To 26441, 36304 To 36358, 49448, 56727 To 56745, 71720 To 72189, 83365 To 83379, 88633, 95188 To 95194, _
26452, 36367 To 36369, 49453, 56751 To 57339, 72250 To 72417, 83413, 88662 To 90491, 95197
我能想到的最好的转换是一系列映射每个范围的 if/then/else 语句,例如
if((ZipCode >= 1067 && ZipCode <=19417) ||
(ZipCode >= 35075 && ZipCode <=35085) ||
...
或者是否有更好的方法,例如将这些范围值放入哈希/数组/集合中的某种方法排序?
I'm converting some VB6 logic to C# and have encountered the following SELECT/CASE statement.
Select Case ZipCode
Case 1067 To 19417, 35075 To 35085, 48455 To 48465, 55583 To 55596, 67480 To 67551, 75392, 85126, _
93047 To 93059, 21217 To 21739, 35091 To 35096, 48480, 55606 To 55779, 67655 To 67707, 76726 To 76835, _
85221 To 87679, 94315 To 94419, 22844 To 25799, 35102, 48488, 56154 To 56254, 67731 To 67759, 76855 To 76889, _
87719 To 88339, 94428 To 94437, 25868, 35112, 48499 To 48531, 56271, 67824 To 67829, 77761, 88353, 94522, _
25879, 35117, 48653, 56281 To 56299, 69427 To 69429, 77773 To 77776, 88361 To 88364, 94553, 26121 To 26160, _
35216 To 35282, 48720 To 48727, 56321 To 56337, 69437 To 69439, 78048 To 78126, 88368 To 88379, 94559, _
26180 To 26215, 35287 To 35469, 49124 To 49356, 56410 To 56479, 70173 To 71287, 78136 To 79117, 88410, 95028 To 95032, _
26316 To 26389, 35576 To 35768, 49406, 56575, 71332 To 71540, 80331 To 83313, 88481, 95111 To 95152, _
26419, 36110, 49419, 56626 To 56648, 71546 To 71711, 83324 To 83362, 88529, 95176 To 95185, _
26434 To 26441, 36304 To 36358, 49448, 56727 To 56745, 71720 To 72189, 83365 To 83379, 88633, 95188 To 95194, _
26452, 36367 To 36369, 49453, 56751 To 57339, 72250 To 72417, 83413, 88662 To 90491, 95197
The best conversion I can think of is a series of if/then/else statements which map each range, e.g.
if((ZipCode >= 1067 && ZipCode <=19417) ||
(ZipCode >= 35075 && ZipCode <=35085) ||
...
Or is there a better way, e.g. some way to put these range values in a hash/array/collection of some sort?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
假设您使用的是 3.5 或更高版本,并且可以访问扩展方法:
如果我有那么多比较,我会为自己创建一个不错的方法:
然后使用它:
如果您不这样做有3.5或者你不想使用扩展方法:
那么使用它:
Assuming you are using 3.5 or above, and have access to extension methods:
If I had that many comparisons I would create a nice method for myself:
Then to use it:
If you don't have 3.5 or you don't want to use extension methods:
then to use it:
也许您可以在 int 上创建扩展方法,例如:
并在代码中使用它,例如
其他想法
如果您基于此进行处理,也许您可以使用类似的方法
。不确定这是 100% 有效的代码,是我凭空想象写的
pps Triad 现在我很确定它正在工作
Maybe you can create extension method on int like:
and use it in code like
additional thoughts
If you do processing based on this, maybe you can use something along those lines
p.s. Not sure this is 100% working code, wrote it from top of my head
p.p.s. Triead and now I'm quite sure it's working
你描述的方法是从VB到C#的字面转换。然而,由于数据量太大,在配置文件中似乎比在代码中更好。如果这样做,最简单的方法可能是简单地循环遍历邮政编码列表并一一比较它们。
更有效的方法是对邮政编码进行排序并进行二分搜索,或者使用哈希函数或类似的函数,但如果这最终成为性能瓶颈,我会感到惊讶。
The method you describe is the literal transformation from VB to C#. However, this is so much data that it seems better off in a configuration file than in the code. If you do that, the easiest way is probably to simply loop through the list with zipcodes and compare them one by one.
A more efficient way would be to sort the zipcodes and do a binary search, or use a hash function or something like that, but I would be surprised if this turns out to be a performance bottleneck.
如果您想让某些给定的方法更加抽象,您可以使用如下扩展方法:
If you wanted to make some of the given approaches a little more abstract, you could go with an extension method like such: