cuốn sách gpt4 ai đã làm

C# Bắt giữ lại/truyền bá các loại ngoại lệ cụ thể

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 18:41:03 29 4
mua khóa gpt4 Nike

Như bạn có thể thấy, tôi đang cố gắng truyền bá GatewayConnectionFailedException tới giao diện người dùng của mình. Tôi muốn mã này bắt được mọi thứ ngoại trừ ngoại lệ và tôi muốn lớp trình bày bắt ngoại lệ đó để thông báo cho người dùng rằng cơ sở dữ liệu có vấn đề để họ có thể đi khắc phục nó. Vấn đề của tôi là khi tôi ném nó lần đầu tiên, tôi nhận được GatewayConnectionFailedException không được xử lý bởi mã người dùng trong mệnh đề bắt GatewayException.

Điều quan trọng cần lưu ý là GatewayConnectionFailedException mở rộng GatewayException, mở rộng Ngoại lệ. Có điều gì tôi đang thiếu hay tôi phải di chuyển tất cả các sản phẩm khai thác sang lớp trình bày?

        thử
{
thứ gì đó();
}
bắt (GatewayConnectionFailedException gcfe)
{
ném;
}
bắt (GatewayException ge)
{
if (ge.GetType() == typeof(GatewayConnectionFailedException))
ném;
string errMsg = "Không thể truy xuất bản ghi do lỗi cổng dữ liệu." + GetTypeInfo();
_logger.Error(errMsg + "\r\n{0}", ge);
}
catch (Exception e)
{
if (e.GetType() == typeof(GatewayConnectionFailedException))
ném;
string errMsg = "Không thể truy xuất bản ghi do lỗi không mong muốn." + GetTypeInfo();
_logger.Error(errMsg + "\r\n{0}", e);
}

câu trả lời hay nhất

Câu hỏi ngớ ngẩn...mã giao diện người dùng của bạn có cố gắng nắm bắt khi lớp được gọi không? Phải có thứ gì đó xử lý được cú ném thứ hai...

Nói tóm lại, có vẻ như bạn đang cố gắng làm điều này:

using System;

không gian tên ConsoleApplication1
{
lớp ExceptionA: Ngoại lệ
{
chuỗi ghi đè công khai Tin nhắn
{
lấy
{
trả về "Ngoại lệ A";
}
}
}

lớp Ngoại lệB: Ngoại lệA
{
chuỗi ghi đè công khai Tin nhắn
{
lấy
{
trả về "Ngoại lệ B";
}
}
}

class Program
{
static void Main(string[] args)
{
thử
{
DoThing();
}
catch (Exception ex)
{
Console.WriteLine("Bị bắt trong mã 'UI': " + ex.Message);
}
}

khoảng trống tĩnh DoThing()
{
thử
{
ném ngoại lệB mới();
}
bắt (ngoại lệB cũ)
{
Console.WriteLine("Bắt B");
ném;
}
bắt (ExceptionA cũ)
{
Console.WriteLine("Bắt A");
}
catch (Exception ex)
{
Console.WriteLine("Bắt chung");
}
}
}
}

tạo ra đầu ra này:

Bắt B
Bị kẹt trong mã "giao diện người dùng": ngoại lệ B
Nhấn phím bất kỳ để tiếp tục...

Có vẻ như bạn đã không nắm bắt được ngoại lệ được ném thứ hai, đó là lý do tại sao nó "không được xử lý". Nếu chúng ta nhận xét try-catch trong main, chúng ta sẽ nhận được một ngoại lệ chưa được xử lý:

static void Main(string[] args)
{
//thử
//{
DoThing();
//}
// bắt (Ngoại lệ cũ)
//{
//Console.WriteLine("Bị bắt trong mã 'UI': " + ex.Message);
//}
}

tạo ra đầu ra sau:

Bắt B

Ngoại lệ chưa được xử lý: ConsoleApplication1.ExceptionB: Ngoại lệ B trong ConsoleApplication1.Program.DoThing() trong C:\Users\Giovanni\AppData\Local\T Dự án tạm thời\ConsoleApplication1\Program.cs: dòng 50 trong C:\Users ConsoleApplication1.Program. Main(String[] trong \Giovanni\AppDa args)ta\Local\Temporary Projects\ConsoleApplication1\Program.cs: Dòng 33 Nhấn phím bất kỳ để tiếp tục. .

Về việc C# bắt lại/truyền bá các loại ngoại lệ cụ thể, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8852922/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress