Teniendo en cuenta lo siguiente:Pruebas de referencia nula en Fa #
[<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}
deserializar con DataContractJsonSerializer(typeof<Tweet[]>)
resultará en el Usuario o el campo Remitente siendo nulo (al menos eso es lo que el depurador me está diciendo).
Si trato de escribir lo siguiente:
let name = if tweet.User <> null
then tweet.User.Name
else tweet.Sender.Name
el compilador emite el error: "El tipo 'TweetUser' no tiene 'nulo' como un valor apropiado"
¿Cómo se prueba valores nulos en este caso?
¿Tiene 'si tweet.User <> Unchecked.defaultof <_>' funciona? Si no, siempre está el atributo ['AllowNullLiteral'] (http://msdn.microsoft.com/en-us/library/ee353608.aspx). – ildjarn
Unchecked.defaultof <_> compila, pero no funciona en el tiempo de ejecución (no coincide correctamente nulo). AllowNullLiteral no es válido para un campo de registro. Buenas sugerencias sin embargo. –