3

これは初心者の質問かもしれません...

私のコードでは、「where Obj.Feld = String」を簡単に使用できますが、「where Obj.Feld.StartsWith("a")」を使用しても機能しません。次の 2 つの関数を参照してください。

    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) は正常に動作します。2 番目の関数 (LikeFileName) はそうではありません。Startswith を使用すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。私は何を間違っていますか?

データベースはオブジェクトの配列であり、文字列で構成される構造です

4

4 に答える 4

4

EntryObject.FileNameすることができるのでNULLEntryObject.FileName.StartsWith(..)を投げることができますNullReferenceException

条件を変更して、最初に確認しますNULL

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

ここでの使用AndAlsoは短絡を採用しています。つまり、最初の条件が満たされない場合、2番目の条件は評価されないため、を取得できませんNullReferenceException

于 2010-08-03T07:59:07.357 に答える
2

データベースにnullエントリが含まれていないことを確認してください。nullに=演算子を適用することはできますが、メソッドを呼び出すことはできないため、StartsWith()は失敗します。

于 2010-08-03T07:53:39.910 に答える
1

EntryObjectオブジェクトの 1 つのFileNameプロパティが null に設定されているようです。最初の方法では、null 値を他の値と比較できるため検出されませんが、2 番目の方法では、例外をスローする null オブジェクトでメソッドを呼び出そうとしています。

于 2010-08-03T08:19:03.043 に答える
0

エンティティにlinqを使用している場合、startswithまたはcontainsをサポートしていないと思います。この投稿を見る Stackoverflow の投稿

于 2010-08-03T08:02:59.767 に答える