Как отловить любое исключение (System.Exception) без предупреждения в F #? - PullRequest
14 голосов
/ 08 июля 2011

Я пытался поймать исключение, но компилятор выдает предупреждение: этот тип теста или downcast всегда будет содержать

let testFail () =
    try
        printfn "Ready for failing..."
        failwith "Fails"
    with
    | :? System.ArgumentException -> ()
    | :? System.Exception -> ()

Вопрос: как это сделать без предупреждения?(Я считаю, что должен быть способ сделать это, иначе не должно быть никаких предупреждений)

Как и C #

try
{
    Console.WriteLine("Ready for failing...");
    throw new Exception("Fails");
}
catch (Exception)
{
}

Ответы [ 2 ]

34 голосов
/ 08 июля 2011

C #:

void testFail()
{
    try
    {
        Console.WriteLine("Ready for failing...");
        throw new Exception("Fails");
    }
    catch (ArgumentException)
    {
    }
    catch
    {
    }
}

F # эквивалент:

let testFail () =
    try
        printfn "Ready for failing..."
        failwith "Fails"
    with
    | :? System.ArgumentException -> ()
    | _ -> ()

C #:

void testFail()
{
    try
    {
        Console.WriteLine("Ready for failing...");
        throw new Exception("Fails");
    }
    catch (ArgumentException ex)
    {
    }
    catch (Exception ex)
    {
    }
}

F # эквивалент:

let testFail () =
    try
        printfn "Ready for failing..."
        failwith "Fails"
    with
    | :? System.ArgumentException as ex -> ()
    | ex -> ()

C #:

void testFail()
{
    try
    {
        Console.WriteLine("Ready for failing...");
        throw new Exception("Fails");
    }
    catch
    {
    }
}

F # эквивалент:

let testFail () =
    try
        printfn "Ready for failing..."
        failwith "Fails"
    with
    | _ -> ()

Как отметил Джоэл, вы не захотите использовать catch (Exception) в C # по той же причинеВы не используете | :? System.Exception -> в F #.

5 голосов
/ 21 октября 2015
try 
  .. code ..
with
  | _ as e -> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...