2011-05-12 9 views
7

Estoy tratando de buscar valores de enumeración DbType de tipos .net. Estoy usando una declaración de coincidencia. Sin embargo, no puedo averiguar cómo hacer coincidir en el tipo byte [].en la declaración de coincidencia de f # ¿cómo coincido con el tipo byte []?

let dbType x = 
    match x with 
    | :? Int64 -> DbType.Int64 
    | :? Byte[] -> DbType.Binary // this gives an error 
    | _ -> DbType.Object 

Si hay una mejor manera de hacer corresponder este tipo, estaría abierto a sugerencias.

Respuesta

10

byte[], byte array y array<byte> son todos sinónimos, pero en este contexto sólo el último funcionará sin paréntesis:

let dbType (x:obj) = 
    match x with 
    | :? (byte[])  -> DbType.Binary 
    | :? (byte array) -> DbType.Binary // equivalent to above 
    | :? array<byte> -> DbType.Binary // equivalent to above 
    | :? int64  -> DbType.Int64 
    | _    -> DbType.Object 
+1

TMTOWTDI - F # es el Perl de las lenguas tipos estáticos. – Daniel

Cuestiones relacionadas