,list
またはseq
のときに、さまざまなプロパティを持つtype
のプロパティが抽出されます。シーケンス(配列、リスト、seq)の基礎となる型を取得
type Car = { name: string }
type CarStore =
{ name: string
cars: Car[]
names: string list
others: string seq
others2: ResizeArray<string> }
let peek x =
Dump x
x
let extractTypeInfo name (typ:Type) =
let isEnumerable = true //todo: true for list, array, seq, etc
let underlyingType = typ //todo: if isEnumerable = true, get actual type
isEnumerable, underlyingType
typeof<CarStore>.GetProperties()
|> peek
|> Seq.map (fun p -> extractTypeInfo p.Name p.PropertyType)
|> Dump
上記の次のプロパティを与える実行以下
サンプルコード、
- 名:
String
- 車:
IStructuralEquatable[]
- 名:
FSharpList<String>
- その他:
IEnumerable<String>
- その他2:
String
- 車:
Car
- 名:
String
- 結果が
- 名以下の情報を持つことになりますように
extractTypeInfo
更新する必要がありますどのようにList<String>
その他:
String
- 名以下の情報を持つことになりますように
- その他2:
String
上記の関数は配列とリストのため正常に動作します。しかし、 'String'はCharに縮小されますが、これは異なる扱いが可能な辺の場合です。 'string seq'は' None'になります。私は上記の関数を使って他のケースを特定しています。 – Richard