null 값의 유형을 가져 오는 방법이 있습니까? 나는 이것이 가장 좋은 대답은 모르겠어요F를 사용하는 null 값의 유형
let a: string = null
let typ = a.GetType()
감사
null 값의 유형을 가져 오는 방법이 있습니까? 나는 이것이 가장 좋은 대답은 모르겠어요F를 사용하는 null 값의 유형
let a: string = null
let typ = a.GetType()
감사
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[]
,하지만 당신은과 유형을 검색 할 견적을 사용할 수 있습니다 :이 작동하지 않습니다. 예를 들어
:
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[]"
브라이언에 의해 솔루션은 아마 당신이 필요하지 않습니다,하지만 당신은 실제로 그것을 필요가 없습니다.
런타임 타입 - 당신이 정말로 유형이되었다 즉 직렬화 해제 (정적 형식이 시사하는 것보다 더 구체적으로 수 있기 때문에 그것은 아마 (GetType
를 사용하여) 런타임시 값의 유형을 감지해야하는 경우 또는 Reflection을 사용하여 만들고 obj
또는 일부 인터페이스 유형의 값을가집니다. 당신은 그냥 정적으로 알려진 형식의 System.Type
을 알고 싶다면는, 당신은해야 -
let handleAtRuntime (value:obj) =
match value with
| null -> // handle null
| _ -> let typ = value.GetType()
// do something using runtime-type information
정적 유형 :이 경우에는 getStaticType
항상 당신에게 obj
을 줄 것이기 때문에, 명시 적으로 null
을 처리해야 typeof<_>
을 사용하여 필요한 모든 것을 작성할 수 있습니다. 귀하의 예를 들어 당신이 값의 유형은 string
것을 확신 할 수 있기 때문에 당신은 브라이언의 솔루션을 사용할 수 있도록, 당신이 정말로, 동적 행동을하지 않아도에서
let handleStatically (value:'T) =
let typ = typeof<'T>
// do something with the type (value still may be null)
: 당신이 일반적인 기능이있을 때 유용합니다 , 그러나 typeof<string>
을 사용하는 것도 괜찮을 것입니다.
유효한 F #인지는 모르겠지만 예상 한 내용과 충분히 유사합니다. +1 lol –
Nice. 입력 값을 _x에 바인딩하는 대신 드롭 할 수도 있습니다. 'getStaticType (_ : 'T) = typeof <'T>'하자. – cfern
감사합니다. 그게 내가 필요한거야! –