Tôi đang phát triển cho Unity3D bằng C# và quyết định sẽ hữu ích khi có hàm xác nhận. (Trong Unity3D, System.Diagnostics.Debug.Assert
tồn tại, nhưng không có gì.)Nhận chuỗi đại diện cho biểu thức được sử dụng làm đối số hàm trong C#
Là một nhà phát triển làm việc chủ yếu trong C++, tôi đang sử dụng để khẳng định thông điệp có chứa biểu thức khẳng định bằng cách khai thác Preprocessor stringizing. Tức là, với xác nhận không thành công của biểu mẫu ASSERT(x > 0, "x should not be zero.")
, thông báo được hiển thị trong thông báo thời gian chạy có thể bao gồm văn bản "x> 0". Tôi muốn có thể làm tương tự trong C#.
Tôi biết ConditionalAttribute và DebuggerHiddenAttribute và đang sử dụng cả hai (mặc dù sau này dường như bị bỏ qua bởi bản dựng tùy chỉnh của MonoDevelop đi kèm với Unity). Trong khi tìm kiếm giải pháp cho vấn đề này, tôi đã xem ba thuộc tính trong không gian tên System.Runtime.CompilerServices
có vẻ liên quan đến những gì tôi đang cố gắng thực hiện: CallerFilePathAttribute, CallerLineNumberAttribute và CallerMemberNameAttribute. (Trong thực hiện của tôi, tôi sử dụng System.Diagnostics.StackTrace
với fNeedFileInfo == true
để thay thế.)
Tôi tự hỏi liệu có lẽ ma thuật phản chiếu (dường như không chắc) hoặc ma thuật thuộc tính (có vẻ hơi có khả năng hơn) có thể giúp tôi đạt được chức năng giống như Tôi đã từng sử dụng C++.
Vâng, chính xác những gì tôi đã suy nghĩ. Vì bạn đã cung cấp mã làm việc, tôi đã xóa câu trả lời của mình. –