Решение Брайана, вероятно, делает то, что вам нужно, но на практике оно вам не нужно.
Тип времени выполнения - Если вам действительно нужно определить тип значения во время выполнения (используя GetType
), то это, вероятно, потому, что тип может быть более конкретным, чем то, что предлагает статический тип (то есть был де-сериализован или создан с использованием Reflection, и вы получили значение типа obj
или некоторый интерфейс). В этом случае вам нужно явно обработать null
, потому что getStaticType
всегда даст вам obj
:
let handleAtRuntime (value:obj) =
match value with
| null -> // handle null
| _ -> let typ = value.GetType()
// do something using runtime-type information
Статический тип - Если вам просто нужно знать System.Type
статически известного типа, тогда вы сможете написать все, что вам нужно, используя typeof<_>
. Это полезно, когда у вас есть общие функции:
let handleStatically (value:'T) =
let typ = typeof<'T>
// do something with the type (value still may be null)
В вашем примере вам не нужно динамическое поведение, потому что вы можете быть уверены, что тип значения - string
, так что вы можете использовать решение Брайана, но использование typeof<string>
тоже подойдет.