空引用考慮以下幾點:測試在F#
[<DataContract>]
type TweetUser = {
[<field:DataMember(Name="followers_count")>] Followers:int
[<field:DataMember(Name="screen_name")>] Name:string
[<field:DataMember(Name="id_str")>] Id:int
[<field:DataMember(Name="location")>] Location:string}
[<DataContract>]
type Tweet = {
[<field:DataMember(Name="id_str")>] Id:string
[<field:DataMember(Name="text")>] Text:string
[<field:DataMember(Name="retweeted")>] IsRetweeted:bool
[<field:DataMember(Name="created_at")>] DateStr:string
[<field:DataMember(Name="user", IsRequired=false)>] User:TweetUser
[<field:DataMember(Name="sender", IsRequired=false)>] Sender:TweetUser
[<field:DataMember(Name="source")>] Source:string}
與DataContractJsonSerializer(typeof<Tweet[]>)
反序列化將導致無論是用戶還是發件人字段爲空(至少這就是調試器告訴我)。
如果我嘗試寫:
let name = if tweet.User <> null
then tweet.User.Name
else tweet.Sender.Name
編譯器發出錯誤:「類型‘TweetUser’沒有‘空’作爲一個適當的值」
如何測試空值在這種情況下?
是否'如果tweet.User <> Unchecked.defaultof <_>'工作?如果沒有,那麼總是有['AllowNullLiteral'屬性](http://msdn.microsoft.com/en-us/library/ee353608.aspx)。 – ildjarn
Unchecked.defaultof <_>編譯但在運行時無法正常工作(不正確匹配空)。 AllowNullLiteral對記錄字段無效。好的建議,但是。 –