如何构造单个字符常量

时间:2014-10-27 21:46:05

标签: vb.net

如何定义一个常量Char值,类似于vbCr?这不起作用......

Public Const ctrM As Char = "\m"C

这表示常量必须只有一个字符。嗯,好吧,不是“\ m”是什么?,以下是什么

Public Const ctrM as Char = Convert.ToChar(9)

这是不允许的,因为它是一个功能。呵呵。幸运的是,这确实有效:

Public Dim ctrM as Char = Convert.ToChar(9)

但这似乎不是最佳的。我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:2)

替换:

  

Public Const ctrM as Char =" \ m" C

为此:

Public Const ctrM As Char = "m"c

答案 1 :(得分:2)

fsintegral的答案很好,但可以稍微简单一些。如果您更喜欢VB函数,则可以使用Framework函数。

班级方法:

Public Class AppConsts

    Public Shared ReadOnly CtrlEM As Char = Convert.ToChar(25)
    Public Shared ReadOnly CtrlT As Char = Convert.ToChar(9)
    Public Shared ReadOnly CtrlN As Char = Convert.ToChar(10)
    Public Shared ReadOnly CtrlM As Char = Convert.ToChar(13)
    Public Shared ReadOnly CrLf As String = CtrlN & CtrlM
    ...
End Class

'Usage:
Dim s as string = "..." & AppConts.CtrlEM

他们甚至会出现在intellisense中。如果您不喜欢类型/类名称入侵,您可以导入类(我有点类似于包含的类型部分,因为它会将IntelliSense列表快速缩小到相关值):

Imports AppConsts
....
Dim s As String = CtrlEM

或者,您可以使用模块方法:

Module Program

    Friend ReadOnly CtrlM As Char = Convert.ToChar(25)

End Module

' usage:
Dim s2 As String = "xxxx..." & CtrlM

对于编译器在编译时如何处理它们,它们并不是真正的常量,因为它们不是 - 它们只是ReadOnly字段。但就IDE中的代码而言 ,它们会像常量一样行动,感觉和品味。

使用Const语句限制了如何定义它们并要求你使用(某些)VB函数而不是.NET函数。

答案 2 :(得分:1)

积分转到Plutonix,以便在评论中提供可行/可行的解决方案 很久以前,当我大量使用模块时,使用了以下方法。

向项目添加公共模块:

    Public Module MyConsts

        ' Define your constant Char

        Public Const vbTabC As Char = Microsoft.VisualBasic.Chr(9) ' For Tabulation
        Public Const vbEMC As Char = Microsoft.VisualBasic.Chr(25) ' For EM (End of Medium)
        ' ^^ if you know the ASCII Char Code.
        ' Use Microsoft.VisualBasic.ChrW() for Unicode (unsure of that)

        Public Const vbCharQM As Char = "?"c
        Public Const vbComma As Char = ","c
        Public Const vbDot As Char = "."c
        ' or
        Public Const vbCharQM2 As Char = CChar("?")
        ' ^^ if you can actually write the char as String in the Compiler IDE

    End Module

然后在项目的任何位置使用常量标识符,就像任何VB常量字符串一样,但是,当然它们的类型为Char(要将它们与String结合使用,您必须使用.ToString()

    Public Sub TestConstChar()
        MessageBox.Show("[" + vbEMC.ToString() + "]")
        ' But hey ! What's the purpose of using End of Medium Char ?
    End sub

请注意,您Environment.NewLine会自动返回有效的换行符,回车符/换行符,或仅回车符,甚至是使用时的其他控件字符串/字符串/流 on 您的操作系统

基于Environment.NewLine示例,您还可以定义(游荡)类

Public Class MyConstChars

    Public Shared ReadOnly Property Tab() As Char
        Get
            Return Microsoft.VisualBasic.ControlChars.Tab
        End Get
    End Property

    ' ...

End Class

' And use it anywhere like myString = "1" + MyConstChars.Tab.ToString() + "One"

这种方法允许您更多地控制静态/共享属性的实际值,例如Environment.NewLine,并允许您的类提供比简单常量更多的选项(成员)。但是,我认为编写LambdaClassName.LambdaClassProperty并不是非常直观。


通过在IDE中使用常量标记/标识符来简化编码的另一种方法是定义代码模板。可以在IDE的选项中定义代码模板(代码片段)。您可能已经知道它是什么:您键入一个关键字,然后IDE将该关键字替换为一个代码块(您经常使用该代码块需要该快捷方式)这是您重新定义时所发生的事情(覆盖)类中的.ToString()函数。

    ' I have for example one code template keyword...
    PlaceholderChecker

    ' ...that generates the following Code :

    #If IsDebugMode Then
    ''' <summary>
    ''' Placeholder Routine to check wether ALL Class Components are included in Solution.
    ''' </summary>
    Private Shared Sub PlaceholderChecker()
        p_ClassVariableName_ClassPartialSuffix = True
    End Sub
    #End If

在某些情况下,您不必定义常量 - 或者必须编写更复杂的代码 - 以获得您想要的位置。