Подтвердить что ты не робот

Как поймать любое исключение (System.Exception) без предупреждения в F #?

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

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

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

Как С#

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

Ответ 1

С#:

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 -> ()
    | _ -> ()

С#:

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 -> ()

С#:

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) в С# по той же причине, по которой вы не используете | :? System.Exception -> в F #.

Ответ 2

try 
  .. code ..
with
  | _ as e ->