Tôi muốn thử chuyển đổi một chuỗi thành Hướng dẫn, nhưng tôi không muốn dựa vào việc bắt ngoại lệ (
- vì lý do hiệu suất - ngoại lệ đắt
- vì lý do khả năng sử dụng - trình gỡ lỗi bật lên
- vì lý do thiết kế - dự kiến không phải là ngoại lệ
Nói cách khác, mã:
public static Boolean TryStrToGuid(String s, out Guid value)
{
try
{
value = new Guid(s);
return true;
}
catch (FormatException)
{
value = Guid.Empty;
return false;
}
}
không phù hợp
Tôi sẽ thử sử dụng RegEx, nhưng vì hướng dẫn có thể được gói ngoặc đơn, bọc nẹp, không được bọc, làm cho nó khó khăn.
Ngoài ra, tôi nghĩ rằng các giá trị Hướng dẫn nhất định không hợp lệ (?)
Cập nhật 1
ChristianK có một ý tưởng tốt để chỉ bắt FormatException
, hơn là tất cả. Đã thay đổi mẫu mã của câu hỏi để bao gồm gợi ý.
Cập nhật 2
Tại sao lo lắng về ngoại lệ ném? Tôi có thực sự mong đợi GUID không hợp lệ thường xuyên không?
Câu trả lời là có . Đó là lý do tại sao tôi đang sử dụng TryStrToGuid - Tôi đang mong đợi dữ liệu xấu.
Ví dụ 1 Phần mở rộng không gian tên có thể được chỉ định bằng cách thêm GUID vào tên thư mục . Tôi có thể phân tích tên thư mục, kiểm tra xem văn bản sau khi kết thúc . là một HƯỚNG DẪN.
c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old
Ví dụ 2 Tôi có thể đang chạy một máy chủ web được sử dụng nhiều muốn kiểm tra tính hợp lệ của một số dữ liệu được đăng lại. Tôi không muốn dữ liệu không hợp lệ buộc tài nguyên cao hơn 2-3 bậc so với mức cần thiết.
Ví dụ 3 Tôi có thể phân tích một biểu thức tìm kiếm được nhập bởi người dùng.
Nếu họ nhập GUID, tôi muốn xử lý chúng đặc biệt (chẳng hạn như tìm kiếm cụ thể đối tượng đó hoặc tô sáng và định dạng cụm từ tìm kiếm cụ thể trong văn bản phản hồi.)
Cập nhật 3 - Điểm chuẩn hiệu suất
Kiểm tra chuyển đổi 10.000 Hướng dẫn tốt và 10.000 Hướng dẫn xấu.
Catch FormatException:
10,000 good: 63,668 ticks
10,000 bad: 6,435,609 ticks
Regex Pre-Screen with try-catch:
10,000 good: 637,633 ticks
10,000 bad: 717,894 ticks
COM Interop CLSIDFromString
10,000 good: 126,120 ticks
10,000 bad: 23,134 ticks
ps tôi không cần phải biện minh cho một câu hỏi.
4.0
. Đó là lý do tại sao câu hỏi, và câu trả lời được chấp nhận, là cách họ đang có.