Trong C#, tôi có một số mã API "an toàn" liên quan đến độ cao UAC. Nó liên quan đến việc kích thước của một enum (như sau)C# sizeof (enum) thay thế? (để workaround resharper sai lỗi)?
int myEnumSize = sizeof (MyEnum);
Mã chính nó là hợp lệ, biên dịch, hoạt động chính xác vv Nhưng Resharper sai cờ nó như là một lỗi ("Không thể sử dụng cấu trúc không an toàn trong bối cảnh an toàn") trong giải pháp. (Starting with version 2.0 of C#, applying sizeof to built-in types no longer requires that unsafe mode be used.) Tôi yêu Resharper, và tôi thích phân tích giải pháp, nhưng với mã này trong giải pháp tôi có một chấm đỏ lớn ở góc khiến tôi luôn nghĩ rằng có thứ gì đó bị hỏng. Nếu tôi yêu cầu resharper bỏ qua lỗi này, nó sẽ trở lại trong vòng vài phút.
Tôi sẽ nêu vấn đề với JetBrains, nhưng tôi đã xem bộ theo dõi của họ và họ đã có một bản ghi đã bị bỏ qua kể từ tháng 3. Nhìn xa hơn, họ có ít nhất hai trường hợp khác đã đăng nhập trở lại trong vài năm, cả hai đều bị loại bỏ với trạng thái "không repro". Tôi không muốn đăng ký theo dõi của họ chỉ để bỏ phiếu này. Tôi vẫn có thể ngừng thở trong nhiều năm. Cách nhanh nhất để chuyển tiếp chỉ là giải quyết vấn đề.
Phương án thay thế tốt nhất vẫn chính xác và có ít cơ hội nhất gây ra một người bảo trì bất kỳ sự cố nào sau này?
tôi có thể mã hóa cứng nó để:
int myEnumSize = 4;
Có là giải pháp chính xác hơn? - Mà không sử dụng sizeof (enum)?
Btw:
Marshal.SizeOf()
là hoàn toàn "an toàn" nhưng trả về kích thước sai.
PS. Mã trong câu hỏi bị ảnh hưởng nặng nề bởi mã demo UACSelfElvation từ Microsoft. Nếu bạn muốn biết thêm chi tiết. Nhưng tôi không nghĩ chúng có liên quan.
Xác nhận công việc. –
Hoàn hảo. Điều này thật đúng với gì mà tôi đã tìm kiếm. Nó hoạt động, và mặc dù nó không phải là đẹp, với một bình luận cho thấy cách ngắn gọn hơn và chỉ ra lý do tại sao nó không được sử dụng ở đây, nó sẽ là tuyệt vời. Cảm ơn bạn. Đây là chính xác những gì tôi đã hy vọng khi yêu cầu Stackoverflow. – DanO