2013-04-12 66 views
4

我不知道爲什麼我得到以下代碼List.filter一部分例外:使用的NullReferenceException String.Contains

pdfLinks |> List.filter(fun x -> x.Contains("shop")) |> List.iter (printfn "%s") 

pdfLinks的類型是「字符串列表」的,它是人口大量的字符串包含「商店」一詞。

它在F#Interactive中使用虛擬列表正常工作。原始文件是通過解析HTML文件生成的,但是通過手錶檢查它顯示了它具有所需類型的期望值。

任何想法可能發生什麼?

謝謝!

+6

也許他們中的一個爲空? – ChaosPandion

+0

似乎並不那麼......儘管我只能通過Watch觀察前50名。打印它們會顯示一些可能由空值引起的空白行。我會先查找空值,然後回答一個答案。謝謝! –

回答

7

嘗試增加以System.String.IsNullOrEmpty打電話到您List.filter,看看它是否解決了這個問題:

pdfLinks 
|> List.filter(fun x -> 
    (not <| System.String.IsNullOrEmpty x) && 
    x.Contains("shop")) 
|> List.iter (printfn "%s") 
+0

就是這樣。正如@ChaosPandion也指出,我得到一個空字符串,因爲它似乎與我交互的庫返回,作爲默認情況下,當它沒有一個成功的字符串返回。我有時會忘記我們在與C#代碼交互時沒有Option商品;)。非常感謝! –

+2

從「外部世界」獲取輸入時,通常最好映射到選項類型並進行適當處理。在你的情況下,取得pdf鏈接列表並映射到'string option',然後你的其他代碼將自動工作(因爲你被迫處理它)。 – SaxonMatt