Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 按字符串长度和文本比较比较类列表_Vb.net_List_Compare - Fatal编程技术网

Vb.net 按字符串长度和文本比较比较类列表

Vb.net 按字符串长度和文本比较比较类列表,vb.net,list,compare,Vb.net,List,Compare,我有一份(缩写)清单。 类“缩写”包含字符串成员“输入”、“输出”和“区分大小写” 课程内容如下 我想对这个列表进行排序,这样类就可以使用“Input” 先于 "zz" 因此,比较应该首先按字符串长度进行比较,然后按字母顺序进行比较,然后按区分大小写进行比较 我怎样才能这样对列表排序 Public Class Abbreviation Implements IComparable Private _sIn As String = String.Empty Private _sOut As

我有一份(缩写)清单。 类“缩写”包含字符串成员“输入”、“输出”和“区分大小写”

课程内容如下

我想对这个列表进行排序,这样类就可以使用“Input”

先于

 "zz"
因此,比较应该首先按字符串长度进行比较,然后按字母顺序进行比较,然后按区分大小写进行比较

我怎样才能这样对列表排序

Public Class Abbreviation

Implements IComparable

Private _sIn As String = String.Empty
Private _sOut As String = String.Empty
Private _bCaseSensitive As Boolean = False

Public Property Input() As String
    Get
        Return _sIn
    End Get
    Set(value As String)
        _sIn = value
    End Set
End Property
Public Property Output() As String
    Get
        Return _sOut
    End Get
    Set(value As String)
        _sOut = value
    End Set
End Property

Public Property CaseSensitive() As Boolean
    Get
        Return _bCaseSensitive
    End Get
    Set(value As Boolean)
        _bCaseSensitive = value
    End Set
End Property

Public Sub New(ByVal uInput As String, ByVal uOutput As String, ByVal uCaseSensitive As Boolean)

    _sIn = uInput
    _sOut = uOutput
    _bCaseSensitive = uCaseSensitive

End Sub

结束类

我想我明白了,除了区分大小写。区分大小写应在区分大小写=False之前

Public Class Abbreviation

Implements IComparable(Of Abbreviation)

Private _sIn As String = String.Empty
Private _sOut As String = String.Empty
Private _bCaseSensitive As Boolean = False

Public Function CompareTo(uOther As Abbreviation) As Integer _
Implements IComparable(Of Abbreviation).CompareTo

    If uOther.Input.Length > Me.Input.Length Then
        Return 1
    ElseIf uOther.Input.Length < Me.Input.Length Then
        Return -1
    Else
        If uOther.Input > Me.Input Then
            Return 1
        Else
            Return -1
        End If
    End If

End Function
公共类缩写
实现IComparable(缩写)
Private _sinasstring=String.Empty
Private _soutas String=String.Empty
Private _bCaseSensitive为布尔值=False
公共函数CompareTo(uOther作为缩写)作为整数_
实现IComparable(缩写)。CompareTo
如果uOther.Input.Length>Me.Input.Length,则
返回1
ElseIf uOther.Input.LengthMe.Input,则
返回1
其他的
返回-1
如果结束
如果结束
端函数

首先,您可以使用自动属性简化代码。编译器编写get、set和backer字段(私有字段)。如果getter、setter中没有额外的代码,这是VisualStudio最新版本中的首选方法

另一个小细节与您的子新。直接设置私有字段违反了封装。经常检查公共场所。在将数据存储到私有字段之前,可能需要运行setter中的代码。类喜欢将数据保存在私有字段中

自动实现属性的示例

Public Property Input As String    
Public Property Output As String
Public Property CaseSensitive As Boolean
可以使用Linq查询在一行代码中完成排序

Dim orderedList = From abrev In lstAbreviations Order By abrev.Input.Lenght Descending Select abrev
要检查输出

For Each abrev As Player In orderedList
      Debug.Print(abrev.Input)
Next

New
是类封装的一部分。它有参数,类中的代码决定如何处理传递的参数。关键点是,在
New
中设置私有字段不会破坏封装。是否还有其他效率是一个不同的讨论。
For Each abrev As Player In orderedList
      Debug.Print(abrev.Input)
Next