Vb.net 如何构造单字符常量

Vb.net 如何构造单字符常量,vb.net,Vb.net,如何定义与vbCr类似的常量Char值?这不管用 Public Const ctrM As Char = "\m"C 这意味着常数必须只有一个字符。好吧,那不是“\m”的意思吗?下面呢 Public Const ctrM as Char = Convert.ToChar(9) 这是不允许的,因为它是一个函数。呵呵。幸运的是,这确实有效: Public Dim ctrM as Char = Convert.ToChar(9) 但这似乎是次优的。我在这里遗漏了什么吗?替换: Public Co

如何定义与vbCr类似的常量Char值?这不管用

Public Const ctrM As Char = "\m"C
这意味着常数必须只有一个字符。好吧,那不是“\m”的意思吗?下面呢

Public Const ctrM as Char = Convert.ToChar(9)
这是不允许的,因为它是一个函数。呵呵。幸运的是,这确实有效:

Public Dim ctrM as Char = Convert.ToChar(9)
但这似乎是次优的。我在这里遗漏了什么吗?

替换:

Public Const ctrM as Char=“\m”C

为此:

Public Const ctrM As Char = "m"c
替换:

Public Const ctrM as Char=“\m”C

为此:

Public Const ctrM As Char = "m"c
在评论中给出有效/可行的解决方案的积分。
很久以前我大量使用模块时使用了以下方法

将公共模块添加到项目中:

    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()


请注意,您有一个
Environment.NewLine
,它可以自动返回有效的换行符,或回车符/换行符,或仅回车符,甚至是另一个在操作系统上使用的控件字符/字符串/流

根据
Environment.NewLine
示例,您还可以定义(漫游)类

这种方法允许您对静态/共享属性的实际值有更多的控制,如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
”例如,我有一个代码模板关键字。。。
占位符检查器
“…生成以下代码:
#如果是debugmode,则
''' 
''占位符例程,用于检查解决方案中是否包含所有类组件。
''' 
专用共享子占位符检查器()
p_ClassVariableName_ClassPartialSuffix=True
端接头
#如果结束
在某些情况下,您不必定义常量,也不必编写更复杂的代码,就可以得到您想要的结果。

在注释中给出有效/可行的解决方案,这是值得称赞的。
很久以前我大量使用模块时使用了以下方法

将公共模块添加到项目中:

    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()


请注意,您有一个
Environment.NewLine
,它可以自动返回有效的换行符,或回车符/换行符,或仅回车符,甚至是另一个在操作系统上使用的控件字符/字符串/流

根据
Environment.NewLine
示例,您还可以定义(漫游)类

这种方法允许您对静态/共享属性的实际值有更多的控制,如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
”例如,我有一个代码模板关键字。。。
占位符检查器
“…生成以下代码:
#如果是debugmode,则
''' 
''占位符例程,用于检查解决方案中是否包含所有类组件。
''' 
专用共享子占位符检查器()
p_ClassVariableName_ClassPartialSuffix=True
端接头
#如果结束

在某些情况下,您不必定义常量,也不必编写更复杂的代码,就可以得到您想要的结果。

fsintegral的答案很好,但可以稍微简单一些。如果你喜欢框架函数而不是VB函数,你可以使用它们

类方法:

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列表迅速缩小到相关值):

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

Module Program

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

End Module

' usage:
Dim s2 As String = "xxxx..." & CtrlM
就编译器在编译时如何处理它们而言,它们并不是真正的常量,因为它们不是——它们只是只读字段。但就IDE中的代码而言,它们的行为、感觉和味道都像常量


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

fsintegral的答案很好,但可以稍微简单一些。如果你喜欢框架函数而不是VB函数,你可以使用它们

类方法:

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列表的范围)