Middle
არის განსხვავება catch ბლოკების დაწერის წესში?
sobes.tech AI
პასუხი AI-სგან
დიახ, არსებობს. catch ბლოკები სერიულიად მუშავდება. უფრო სპეციფიკური გამონაკლისები უნდა იყოს უფრო ზოგიერთის წინ.
try
{
// კოდი, რომელიც შეიძლება გამოიწვიოს გამონაკლისი
}
// უფრო სპეციფიკური გამონაკლისი
catch (System.FormatException ex)
{
// ფორმატის შეცდომის მართვა
}
// ნაკლებად სპეციფიკური გამონაკლისი
catch (System.Exception ex)
{
// ყველა სხვა გამონაკლისის მართვა
}
თუ უფრო ზოგადი გამონაკლისი პირველი დააყენეთ, მაშინ უფრო სპეციფიკური catch ბლოკი არასოდეს იქნება მისაღწევი იმ გამონაკლისებისთვის, რომლებიც მას მემკვიდრეობით იღებენ. მაგალითად, FormatException მემკვიდრეობს Exception-ს. თუ catch (Exception ex) პირველი იქნება, ის დაიჭერს და FormatException-საც.
არასწორი სია:
try
{
// კოდი, რომელიც შეიძლება გამოიწვიოს გამონაკლისი
}
// საერთო გამონაკლისი
catch (System.Exception ex)
{
// ყველა გამონაკლისის მართვა, მათ შორის `FormatException`
}
// ეს ბლოკი არასოდეს იქნება მისაღწევი `FormatException`-ისთვის,
// რადგან ის უკვე დაიჭირეს წინამორბედმა ბლოკმა
catch (System.FormatException ex)
{
// ეს კოდი ამ შემთხვევაში მიუწვდომელია
}
C# კომპილატორი გამოიტანს გაფრთხილებას ან შეცდომას მიუწვდომელი catch ბლოკისთვის.