Pracuję dla Unity3D przy użyciu C# i zdecydowałem, że byłoby użyteczne mieć funkcję assert. (W Unity3D, System.Diagnostics.Debug.Assert
istnieje, ale nic nie robi.)Pobierz ciąg reprezentujący wyrażenie używane jako argument funkcji w C#
Jako deweloper, który działa głównie w C++, jestem przyzwyczajony do dochodzić wiadomości zawierające wyrażenie rzekoma drodze operatora preprocesor stringizing. Oznacza to, że w przypadku nieudanego potwierdzenia postaci ASSERT(x > 0, "x should not be zero.")
, komunikat wyświetlany w komunikacie uruchomieniowym może zawierać tekst "x> 0". Chciałbym móc zrobić to samo w języku C#.
Mam świadomość atrybutu warunkowegoAttribute i DebuggerHiddenAttribute i używam obu (chociaż ten ostatni wydaje się być ignorowany przez niestandardową kompilację MonoDevelop dołączoną do Unity). Szukając rozwiązania tego problemu, natrafiłem na trzy atrybuty w przestrzeni nazw System.Runtime.CompilerServices
, które wydają się być związane z tym, co próbuję zrobić: CallerFilePathAttribute, CallerLineNumberAttribute i CallerMemberNameAttribute. (W mojej realizacji, używam System.Diagnostics.StackTrace
z fNeedFileInfo == true
zamiast.)
Zastanawiam się, czy istnieje jakikolwiek odbicie może magia (mało prawdopodobne) lub magii atrybutu (wydaje się nieco bardziej prawdopodobne), że może pomóc mi osiągnąć taką samą funkcjonalność jak Jestem przyzwyczajony do C++.
Tak, dokładnie to, co myślał. Ponieważ podałeś działający kod, usunąłem odpowiedź. –