Как передать CultureInfo методу TryParse в F # - PullRequest
2 голосов
/ 24 мая 2011

В F # я разбираю десятичную строку с

let foo str =
    match Decimal.TryParse str with
    | (true, result) -> Some result
    | (false, _) -> None

, который использует текущую системную культуру для анализа строки. Но я на самом деле хочу проанализировать строку с помощью CultureInfo.InvariantCulture. Можно ли это сделать способом сопоставления с образцом, как описано выше? Если нет, то какой самый чистый способ сделать это?

Ответы [ 3 ]

4 голосов
/ 24 мая 2011

Используйте что-то вроде:

 let foo str =
     match System.Decimal.TryParse(str, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture) with
     | (true, result) -> Some result
     | (false, _) -> None 
2 голосов
/ 24 мая 2011

Вам необходимо использовать перегрузку, которая принимает NumberStyles в качестве второго аргумента и CultureInfo в качестве третьего аргумента.Поскольку это метод .NET, аргументы являются кортежными (за исключением того, что компилятор F # превращает последний byref аргумент в возвращаемый тип):

let foo str =
  match Decimal.TryParse(str, NumberStyles.None, CultureInfo.InvariantCulture) with
  | (true, result) -> Some result
  | (false, _) -> None

Подпись типа метода (как показано в VisualПодсказка для студии):

Decimal.TryParse (s: строка, стиль: NumberStyles, поставщик: IFormatProvider, результат: byref ): bool

Когдаиспользуя метод с сопоставлением с образцом, компилятор превращает все byref аргументы с конца списка аргументов в (последние) элементы возвращаемого кортежа, но сохраняет параметры как кортеж, поэтому вы должны вызывать метод, используяTryParse(foo, bar) нотация.

0 голосов
/ 24 мая 2011

использовать другую перегрузку TryParse метод

open System
open System.Globalization
let parse s = 
    match Decimal.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture) with
    | true, v -> Some v
    | false, _ -> None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...