这可能是一个新手问题…… 在我的代码中,我可以轻松地使用“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.