0
A
回答
5
let getStaticType<'T>(_x : 'T) = typeof<'T>
let a : string = null
let b : int[] = null
let typ1 = getStaticType a
let typ2 = getStaticType b
printfn "%A %A" typ1 typ2
// System.String System.Int32[]
1
我不知道這是最好的答案,但你可以用引文檢索與類型。
例如:
let get_type x = <@ x @>.Type.FullName
和測試:
let a : string = null
let a' = get_type a
val a : string = null
val a' : string = "System.String"
let a : int[] = null
let a' = get_type a
val a : int [] = null
val a' : string = "System.Int32[]"
4
布賴恩的解決方案可能做你需要什麼,但你不應該需要在實踐中。
運行時類型 -如果你真的需要(使用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
,所以你可以使用Brian的解決方案:當你有泛型函數,這非常有用,但使用typeof<string>
也可以。
相關問題
- 1. F#如何處理可空類型
- 2. 與F#類型使用CLR接口
- 3. 在類型使用F#索引屬性
- 4. 使用c#,當我有一個對象類型的變量時,如何利用使用空值的值類型?
- 5. F#類型推斷
- 6. F#多態類型
- 7. F#類型約束
- 8. F#類型信息
- 9. F#與泛型類型的問題
- 10. f#泛型類型比較
- 11. 可爲空的值類型只是包裝常規值類型?
- 12. 是F#引用類型中的選項類型?
- 13. 非可空字符串的F#類型別名
- 14. 使用F的類型成員中的元組#
- 15. 是可空類型的引用類型?
- 16. 可空的複雜類型的值
- 17. F-Sharp(F#)無類型無限
- 18. 使用F#類型提供實例類型,並提供它們的屬性
- 19. F# - 類型擴充VS類型擴展
- 20. 使用java.util.Optional爲可選類型的子字段返回空值
- 21. F#sqlProvider的SQLite的忽略列類型
- 22. F#的遞歸類型的SQL表
- 23. bytea類型和空值,Postgres
- 24. DataRow ArrayItem的空值數據類型vb.net
- 25. 如何修改可空類型的值?
- 26. F#:使用DU限制類型的物業
- 27. 如何使用動態類型而不是F#中的Object?
- 28. TypeScript使用相同類型的全局類型名稱空間
- 29. MySQL的數據類型,以空值「0」,和非空值「1」
- 30. F#如何通過匹配語句確定值的類型?
我不知道這是否是有效的F#,但它看起來足夠接近我期待看到的+1 +1 lol –
不錯。您也可以刪除輸入值,而不是將其綁定到_x。 'let getStaticType(_:'T)= typeof <'T>'。 – cfern
謝謝。這就是我需要的! –