当前位置 : 主页 > 编程语言 > c语言 >

LINQ .Startswith或.Contains VB.NET4中的问题

来源:互联网 收集:自由互联 发布时间:2021-06-24
这可能是一个新手问题…… 在我的代码中,我可以轻松地使用“where Obj.Feld = String”,但使用“where Obj.Feld.StartsWith(”a“)”不起作用.请参阅以下两个功能: Public Function EntriesByFileName(ByR
这可能是一个新手问题……

在我的代码中,我可以轻松地使用“where Obj.Feld = String”,但使用“where Obj.Feld.StartsWith(”a“)”不起作用.请参阅以下两个功能:

Public Function EntriesByFileName(ByRef Database() As Entry, ByVal Filename As _
  String) As IEnumerable(Of Entry)
        Dim Result As IEnumerable(Of Entry) = From EntryObject In Database _
        Where (EntryObject.FileName = Filename) Select EntryObject
        Return Result
    End Function

    Public Function EntriesLikeFileName(ByRef Database() As Entry, ByVal _
      Filename As String) As IEnumerable(Of Entry)
        Filename = Filename.ToLower
        Dim Result As IEnumerable(Of Entry) = From EntryObject In Database _
          Where EntryObject.FileName.StartsWith("a") Select EntryObject
        Return Result
    End Function

第一个函数(byFileName)工作正常.第二个函数(LikeFileName)没有.使用Startswith我得到“对象引用未设置为对象的实例”.我究竟做错了什么?

数据库是一个对象数组,一个由字符串组成的结构

EntryObject.FileName可以为NULL,因此EntryObject.FileName.StartsWith(..)可以抛出NullReferenceException.

将条件更改为首先检查NULL,例如

if EntryObject.FileName <> nothing AndAlso EntryObject.FileName.StartsWith(..)

使用AndAlso这里使用短路,这意味着如果第一个条件不满足,第二个条件将不会被评估,因此我们无法获得NullReferenceException.

网友评论