Estoy tratando de emparejar patrones con algunos tipos que me importan para la generación de SQL. Idealmente me gustaría hacer esto:¿Hay alguna forma en F # de testear frente a un tipo genérico sin especificar el tipo de instancia?
let rec getSafeValue record (prop: PropertyInfo) =
match prop.GetValue(record, null) with
| :? string as str -> "'" + str + "'"
| :? Option<_> as opt ->
match opt with
| Some v -> getSafeValue v prop
| None -> "null"
| _ as v -> v.ToString()
El problema es que aquí, el parámetro de tipo de Option<_>
pone restricción para que coincida con la de record
, que termina siendo simplemente obj
.
Sé que puedo hacer un chequeo basado en la reflexión del dolor detrás de mí (compruebe que es un tipo genérico y que es un tipo de opción basado en el nombre), pero prefiero evitarlo si lo hago. posible.
que es una manera ordenada de hacerlo. Terminé haciendo algo similar. – kolosy