Я пытаюсь перебрать массив объектов и рекурсивно распечатать свойства каждого объекта.
Вот моя объектная модель:
type firmIdentifier = {
firmId: int ;
firmName: string ;
}
type authorIdentifier = {
authorId: int ;
authorName: string ;
firm: firmIdentifier ;
}
type denormalizedSuggestedTradeRecommendations = {
id: int ;
ticker: string ;
direction: string ;
author: authorIdentifier ;
}
Вот как я создаю экземпляры своих объектов:
let getMyIdeasIdeas = [|
{id=1; ticker="msfqt"; direction="buy";
author={authorId=0; authorName="john Smith"; firm={firmId=12; firmName="Firm1"}};};
{id=2; ticker="goog"; direction="sell";
author={authorId=1; authorName="Bill Jones"; firm={firmId=13; firmName="ABC Financial"}};};
{id=3; ticker="DFHF"; direction="buy";
author={authorId=2; authorName="Ron James"; firm={firmId=2; firmName="DEFFirm"}};}|]
А вот мой алгоритм для итерации, рекурсии и печати:
let rec recurseObj (sb : StringBuilder) o=
let props : PropertyInfo [] = o.GetType().GetProperties()
sb.Append( o.GetType().ToString()) |> ignore
for x in props do
let getMethod = x.GetGetMethod()
let value = getMethod.Invoke(o, Array.empty)
ignore <|
match value with
| :? float | :? int | :? string | :? bool as f -> sb.Append(x.Name + ": " + f.ToString() + "," ) |> ignore
| _ -> recurseObj sb value
for x in getMyIdeas do
recurseObj sb x
sb.Append("\r\n") |> ignore
Если вы не можете сказать, я пытаюсь создать CSV-файл и распечатываю типы для целей отладки. Проблема в том, что первый элемент проходит в том порядке, в котором вы ожидаете, но все последующие элементы проходят через несколько иной (и запутанный) порядок «дочерних» свойств, например:
RpcMethods + denormalizedSuggestedTradeRecommendationsid:
1, тикер: msfqt, направление:
купить, RpcMethods + authorIdentifierauthorId:
0, authorName: Джон
Смит, RpcMethods + firmIdentifierfirmId:
12, фирменное наименование: Фирменное1,
RpcMethods + denormalizedSuggestedTradeRecommendationsid:
2, тикер: goog, направление:
продать, RpcMethods + authorIdentifierauthorName:
Билл
Джонс, RpcMethods + firmIdentifierfirmName:
ABC Financial, код фирмы: 13, код автора: 1,
RpcMethods + denormalizedSuggestedTradeRecommendationsid:
3, тикер: DFHF, направление:
купить, RpcMethods + authorIdentifierauthorName:
Рон
Джеймс, RpcMethods + firmIdentifierfirmName:
DEFFirm, firmId: 2, authorId: 2,
Есть идеи, что здесь происходит?