在没有SELECT CASE的情况下将字符串写入10个不同文件中的1个?

时间:2017-05-14 09:18:58

标签: vb.net

我必须根据他的计算值将一个字符串写入10个文件中的一个 - 每个值一个文件。该值在-5到+5的范围内,从不为零。

你知道一种更有效的方式吗

SELECT CASE value
   CASE -5
     Write2File(FileNameMinus5, string)
   CASE -4
     Write2File(FileNameMinus4, string)
   CASE -3
     Write2File(FileNameMinus3, string)
   ...
   CASE +1
     Write2File(FileNamePlus1, string)
   CASE +2
     Write2File(FileNamePlus2, string)
   CASE +3
     Write2File(FileNamePlus3, string)
   ...
END SELECT

我想像

这样的东西
   Write2File(FileName%ContentOfValue%, string)

我该怎么做?

2 个答案:

答案 0 :(得分:1)

使用此

Dim filename As String
If value < 0 Then
  filename = FileName+"Minus"+Math.Abs(value)
Else
  filename = FileName+"Plus"+value
End If

答案 1 :(得分:1)

您可以使用Dictionary来存储要写入的值和要使用的文件名

Dim mapping As Dictionary(Of Int32, String) = New Dictionary(Of Int32, String)
mapping.Add(-5, "FilenameMinus5")
mapping.Add(-4, "FilenameMinus4")
mapping.Add(-3, "FilenameMinus3")
mapping.Add(-2, "FilenameMinus2")
mapping.Add(-1, "FilenameMinus1")
mapping.Add(1, "FilenamePlus1")
mapping.Add(2, "FilenamePlus2")
mapping.Add(3, "FilenamePlus3")
mapping.Add(4, "FilenamePlus4")
mapping.Add(5, "FilenamePlus5")

现在写入文件只是从字典中提取文件名

Dim newValue = -5
Dim file = mapping(newValue)
Write2File(file, stringtobewritten)

您甚至可以将“词典”定义更改为直接存储在值部分中对数据执行的操作

Dim mapping As Dictionary(Of Int32, Action(Of String)) = 
                          New Dictionary(Of Int32, Action(Of String))

mapping.Add(-5, Sub(value) Write2File("FilenameMinus5", value))
mapping.Add(-4, Sub(value) Write2File("FilenameMinus4", value))
mapping.Add(-3, Sub(value) Write2File("FilenameMinus4", value))
mapping.Add(-2, Sub(value) Write2File("FilenameMinus4", value))
mapping.Add(-1, Sub(value) Write2File("FilenameMinus4", value))
mapping.Add(1, Sub(value) Write2File("FilenamePlus1", value))
mapping.Add(2, Sub(value) Write2File("FilenamePlus2", value))
mapping.Add(3, Sub(value) Write2File("FilenamePlus3", value))
mapping.Add(4, Sub(value) Write2File("FilenamePlus4", value))
mapping.Add(5, Sub(value) Write2File("FilenamePlus5", value))

Dim stringToBeWritten = "TestData"
Dim newValue = -5
mapping(newValue)(stringToBeWritten)