显示代码时间中函数参数的可接受值列表

时间:2015-06-03 23:21:44

标签: vb.net

每个VB.NET开发人员都清楚,当尝试在VS中编写代码时,intellisense为.NET函数的参数提供值;但现在问题是如何定义编码时的函数,本身有助于我们为函数参数选择可接受的值?

可能有帮助的图片: Image of MsgBoxStyle Enumerations being shown by intellisense

2 个答案:

答案 0 :(得分:5)

虽然Enums提供“本机”行为,但它也存在于其他非Enum类型,例如System.Drawing.Color或System.Drawing.Brush,它们在点缀时会显示类似的“harcoded values”列表。这种行为也可以在自定义类型上进行(至少在VB.Net中;除非C#中没有可用的更改)。

这是如何工作的?它使用了一个未记录的XML文档标记,即 completionlist ,您可以在其中引用一个类型,相同(对于Color)或另一个类型(对于引用Brushes的Brush)。在此类型中所有公共static / Shared字段和属性将位于完成列表中(即使是那些不属于引用类型的列表)

所以例如(真的很做作)你可能会有这样的事情:

''' <completionlist cref="FamousPeople"/>
Class People
    ' ...
End Class

NotInheritable Class FamousPeople
    Public Shared ReadOnly Sehnsucht As New People("Sehnsucht") ' Why not ?
    Shared ReadOnly Property JohnSkeet As New People("John Skeet")
    Shared ReadOnly Property EricLippert As New People("Eric Lippert")
    Shared ReadOnly Property MarcGravell As New People("Marc Gravell")
End Class

(如果我愿意的话,我可以把它们直接放在人们里面)

然后,当你必须提供类型为People的值时,Intellisense会显示已定义的“列表”(如果您愿意,可以选择创建未列出的列表)

答案 1 :(得分:2)

您可以通过在每个方法,属性和类之前添加3个单引号(''')来为方法,属性和类添加说明。这将创建一些文档注释,如:

''' <summary>
''' Description sumary for the method
''' </summary>
''' <param name="param1">param 1 description.</param>
''' <param name="param2">param 2 description.</param>
''' <returns>return description</returns>
Public Function FunctionName(param1 As String, param2 As int) As String
   ' ...
End Function

不要害怕记住所有类似XML的语法。 VS会为你生成它。你只需要插入你的信息。

提示

如果参数的值有一定范围,最好使用Enumhttp://www.dotnetperls.com/enum-vbnet

Enum AnimalType
    None = 0
    Cat = 1
    Dog = 2
End Enum

Sub FeedAnimal(animalType As AnimalType)
    If animalType = AnimalType.Cat Then
        ' ...
    End If
End Sub

提示2:

如果你的参数需要是字符串,你可以创建一个带有一些常量的类来帮助实现这个或实现一些共享属性来使用实例:

''' <completionlist cref="AnimalType"/>
Class AnimalType
    Private Name As String

    Public Shared ReadOnly Cat As AnimalType = New AnimalType("Cat")
    Public Shared ReadOnly Dog As AnimalType = New AnimalType("Dog")

    Private Sub New(Name as String)
        Me.Name = Name 
    End Sub

    Public Overrides Function ToString() As String
        Return Me.Name 
    End Function
End Class