2013-01-03 63 views
4

我不是IT专业人士,所以如果我错过了某些明显的道歉,我很抱歉。有没有更好的方式来检索我的设置?

在编写程序时,我添加了一个类SettingsIni,它读取键和值的文本文件。我发现这种方法非常灵活,因为可以在不改变任何代码的情况下添加或更改设置,无论我附加了哪个应用程序。 这里是主要的代码。

Public Shared Sub Load() 

    Using settingsReader As StreamReader = New StreamReader(System.AppDomain.CurrentDomain.BaseDirectory & "settings.ini") 
     Do While settingsReader.Peek > -1 
      Dim line As String = settingsReader.ReadLine 
      Dim keysAndValues() As String = line.Split("="c) 
      settingsTable.Add(keysAndValues(0).Trim, keysAndValues(1).Trim) 

      Loop 
    End Using 
End Sub 


Public Shared Function GetValue(ByVal key As String) 
    Dim value As String = settingsTable(key) 
    Return value 
End Function 

这允许您通过调用SettingsIni.GetValue方法在代码中使用设置。

例如:

watcher = New FileSystemWatcher(SettingsIni.GetValue("inputDir"), "*" & SettingsIni.GetValue("extn")). 

我发现这使我的代码ESAY阅读。 我的问题是在这种情况下的值,inputDirextn,是徒手输入,而不是通过intellisense检查。我总是担心我可能会在应用程序的不常使用的分支中输入错字,并在测试过程中错过。 是否有检索设置的最佳实践方法?或围绕这些未经检查的写意类型值的方式?

回答

0

代码示例的最佳做法是使用常量作为可能的设置。

Class Settings 
    Const inputDir as String = "inputDir" 
    Const extn as String = "extn" 
End Class 


watcher = New FileSystemWatcher(SettingsIni.GetValue(Settings.inputDir), "*" & SettingsIni.GetValue(Settings.extn)) 
+0

我喜欢这个回答。它保留了基本的格式,并给了我intellisense的纠错。 – SubtleStu

0

如果它是一个数字,你可以做以下三两件事:

  1. 检查是否是数字 - 使用IsNumeric函数
  2. 检查它是否是整数 - 使用Int函数,如:若INT(数字) =号
  3. 检查的有效范围,如:如果数> =下界和数量< =上界
0

我假设你使用VB.NET? 如果是这样,在“我的项目”下有方便的“设置”菜单。它提供了一种方法来存储程序的设置并通过“my.settings.YOURKEY”检索它们。优点是,这种类型的安全是在这个层面上执行的。 此外,您还可以以几乎相同的方式存储“资源” - 但资源更适合字符串/图片等。但是,如果要翻译程序,它们特别好。

至于你目前的问题: 在设置中存储路径,这样你不需要立即改变你的代码,但你可以使用你的系统,不会拼错任何东西。

+0

该死,我不小心没有:( –

+0

登录我会去看看这,看看它是什么,我以后,我 – SubtleStu

0

这完全取决于你。你是检查报价中几乎所有东西的人,而不是智力感知。

但你仍然可以使用Try-Catch块:

Try 
    Dim value As String = settingsTable(key) 
    Return value 
Catch ex As Exception 
    MsgBox(ex.ToString) 
    Return "" 
End Try 

所以,你会得到一个消息框,如果你想访问你可能打错一个不存在的设置。

+0

编辑的尝试catch块了上面的代码,使它对于这个问题是可读的,但它们在完整的代码中。问题是如果我发现一个错误来纠正它,我需要编辑代码并重新部署应用程序,如果它是一个已经存在的服务,那么这可能是一个真正的麻烦。 – SubtleStu

相关问题