Создать дискриминированное объединенное дело из строки
Я пытаюсь создать DU случаи из строк. Единственный способ увидеть это - перечислить случаи DU черезMicrosoft.FSharp.Reflection.FSharpType.GetUnionCases
а затем выбираяUnionCase
которая соответствует строке (используя.Name
), а затем сделать фактический случай DU из этого с помощью.FSharpValue.MakeUnion
Isn»Есть ли более простой и элегантный способ сделать это? В моем сценарии у меня есть DU с парой сотен случаев для ключевых слов. Я должен прочитать строки (ключевые слова) из файла и сделать из них типы. Я сделал немногооптимизация» положив дела в карту, но я надеялся, что тамбыло бы лучшим способом сделать это.
У меня есть следующее, например:
type Keyword =
| FOO
| BAR
| BAZ
| BLAH
let mkKeywords (file: string) =
use sr = new StreamReader(file)
let caseMap =
FSharpType.GetUnionCases(typeof)
|> Array.map (fun c -> (c.Name, FSharpValue.MakeUnion(c, [||]) :?> Keyword))
|> Map.ofArray
[
while not sr.EndOfStream do
let l = sr.ReadLine().Trim()
match caseMap.TryFind l with
| Some c -> yield c
| None -> failwith