Điều này có liên quan đến câu hỏi về return type attributes và anonymous classes, nhưng sau đó cho các phương thức ẩn danh (hoặc lambdas), nhưng đến nay tôi có thể tìm thấy câu hỏi chính xác này dường như chưa có trên stackoverflow.Cú pháp để áp dụng thuộc tính cho một phương thức ẩn danh?
Trong mã cho các thực thể kinh doanh mà chúng tôi tạo ra bằng CodeSmith, chúng tôi hiện có các thuộc tính [DebuggerNonUserCode]
, vì vậy chúng không được tính vào kết quả bảo hiểm mã. Thật không may, mã được tạo ra sử dụng các phương thức vô danh mà bây giờ vẫn hiển thị trong phạm vi mã với các tên như Class.<>c__DisplayClass3c
vì cách này thực sự được trình biên dịch xử lý.
đang nhanh Ví dụ, với những cái tên và các loại thay đổi để bảo vệ những người vô tội, có thể nói:
public delegate T ReturnSomething<T>();
public static T SafeCall<T>(T whenNotSupported, ReturnSomething<T> method)
{
T result;
try
{
result = method();
}
catch (NotSupportedException)
{
result = whenNotSupported;
}
return result;
}
public static void CodeExample()
{
string foo = SafeCall<string>("OOPS!", delegate
{
//throw new NotSupportedException();
return "Ok";
});
}
Có cách nào để có được [DebuggerNonUserCode]
thuộc tính bằng các phương pháp để chúng ta có thể thoát khỏi những tên đọc sai tên phương thức ẩn danh từ mã được tạo của chúng tôi từ kết quả bảo hiểm mã của chúng tôi? Hay chúng ta cần phải viết lại mã được tạo ra để không còn sử dụng các phương thức nặc danh nữa?
Đưa [DebuggerNonUserCode]
trên method
tham số của định nghĩa SafeCall
phương pháp (trước kiểu ReturnSomething<T>
tham số) không biên dịch và có lẽ sẽ không làm chính xác những gì chúng tôi muốn nếu nó sẽ. Sau đây cũng không biên dịch:
public static void CodeExample()
{
string foo = SafeCall<string>("OOPS!", [DebuggerNonUserCode] delegate
{
//throw new NotSupportedException();
return "Ok";
});
}
Tôi đã cố gắng để có một cái nhìn nhanh chóng tại CSharp Language Specification, nhưng đã không có bất kỳ may mắn tìm được một cú pháp mà sẽ cho phép áp dụng các thuộc tính với các phương pháp vô danh (hoặc lambdas) . Tôi đã bỏ lỡ nó, hoặc là điều này (hiện tại?) Không thể ...?
Đừng nghĩ này sẽ được ưu tiên cao (nếu nó sẽ được thực hiện), nhưng tôi đã thêm gợi ý vào MS Connect tại https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 489925 – peSHIr