W języku C#, następujący kod jest ważny:F # Odpowiednik Enum.TryParse
MyEnum myEnum = MyEnum.DEFAULT;
if (Enum.TryParse<MyEnum>(string, out myEnum))
{
Console.WriteLine("Success!");
}
Więc pomyślałem, że to wykorzystać w F #. Oto moja próba:
let mutable myEnum = MyEnum.DEFAULT
if Enum.TryParse<MyEnum>(string, &myEnum) then
printfn "Success!"
Ale narzeka
a generic construct requires that the type 'MyEnum' have a default constructor
Co w świecie to znaczy?
Nie mogę odtworzyć tego, jeśli zmienię "MójEnum" na "System.DayOfWeek". Jaka jest definicja "MyEnum"? FYI możesz usunąć potrzebę 'mutable', wykonując' let (ok, myEnum) = Enum.TryParse (ciąg) 'zamiast tego. –
Lee
Jak zdefiniowana jest Twoja wyliczanka? Sądzę, że możesz próbować sparsować dyskryminowaną unię zamiast wyliczać. – scrwtp
@scrwtp, masz całkowitą rację. Nie zdawałem sobie sprawy, że istnieje niewielka różnica w sposobie definiowania w F #. Aby zrozumieć, musiałem przyjrzeć się https://fsharpforfunandprofit.com/posts/enum-types/. Jeśli uczynisz tę odpowiedź, ustawię ją jako "odpowiedź". – user3685285