Biorąc pod uwagę następujące elementy:Testowanie zerowy odniesienia w 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}
deserializacji z DataContractJsonSerializer(typeof<Tweet[]>)
spowoduje użytkownika albo polu nadawcy jest zerowa (przynajmniej to co debugger mówi mi).
Gdy próbuję napisać następujące:
let name = if tweet.User <> null
then tweet.User.Name
else tweet.Sender.Name
kompilator emituje ten błąd: „Typ«TweetUser»nie ma«null»jako właściwą wartość”
Jak przetestować wartości null w tym przypadku?
Czy 'jeśli tweet.User <> Unchecked.defaultof <_>' działa? Jeśli nie, to zawsze jest atrybut ['AllowNullLiteral'] (http://msdn.microsoft.com/en-us/library/ee353608.aspx). – ildjarn
Niesprawdzony.defaultof <_> kompiluje, ale nie działa w środowisku wykonawczym (nie pasuje poprawnie do wartości null). AllowNullLiteral nie jest poprawne dla pola rekordu. Dobre sugestie jednak. –