Tôi đang tìm cách lọc ra các phương pháp có công cụ sửa đổi unsafe
thông qua phản ánh. Nó không có vẻ là một thuộc tính phương thức.Xác định xem phương pháp không an toàn thông qua phản ánh
Có cách nào không?
CHỈNH SỬA: có vẻ như thông tin này không có trong siêu dữ liệu, ít nhất tôi không thể nhìn thấy thông tin đó trong IL. Tuy nhiên, phản xạ hiển thị công cụ sửa đổi unsafe
trong chế độ xem C#. Bất kỳ ý tưởng về cách nó được thực hiện?
EDIT 2: Đối với nhu cầu của tôi, tôi đã kết thúc bằng một kiểm tra, giả định rằng nếu một trong các tham số của phương thức là con trỏ hoặc kiểu trả về là con trỏ thì phương thức này không an toàn.
public static bool IsUnsafe(this MethodInfo methodInfo)
{
if (HasUnsafeParameters(methodInfo))
{
return true;
}
return methodInfo.ReturnType.IsPointer;
}
private static bool HasUnsafeParameters(MethodBase methodBase)
{
var parameters = methodBase.GetParameters();
bool hasUnsafe = parameters.Any(p => p.ParameterType.IsPointer);
return hasUnsafe;
}
Điều này không xử lý, tất nhiên, tôi chỉ quan tâm đến chữ ký của phương thức.
Cảm ơn!
Lý do muốn làm điều này là gì? Có lẽ có một sự thay thế. – GenericTypeTea
@GenericTypeTôi đang thực hiện một số tạo mã thông qua CodeDom. Nó không hỗ trợ tạo từ khóa 'unsafe', vì vậy tôi muốn bỏ qua các kiểu có phương thức' unsafe'. –
Tôi đoán từ khóa không an toàn chỉ là một cờ nói với trình biên dịch: không tạo ra lỗi biên dịch ở đây vì tôi dự định sử dụng mã không an toàn. Reflector có thể phát hiện mã không an toàn và thêm từ khóa sau đó. Tôi nhận thấy nếu bạn sử dụng một khối không an toàn trong một phương pháp "an toàn", các từ khóa không an toàn trong Reflector được tạo ra trong khai báo phương pháp, do đó, nó không tạo ra một khối cho điều đó. Vì vậy, câu trả lời ở đây là: nếu Reflector có thể phát hiện mã không an toàn trong mscorlib, bạn cũng có thể ... – Koen