Я разрабатываю для Unity3D с помощью C# и решил, что было бы полезно иметь функцию assert. (В Unity3D, System.Diagnostics.Debug.Assert
существует, но ничего не делает.)Получить строку, представляющую выражение, используемое как аргумент функции в C#
Как разработчик, который работает в основном в C++, я привык утверждать сообщения, которые содержат заявленную выражение посредством оператора препроцессора stringizing. То есть, при неудачном утверждении формы ASSERT(x > 0, "x should not be zero.")
, сообщение, отображаемое во время выполнения сообщения, может содержать текст «x> 0». Я хотел бы иметь возможность сделать то же самое в C#.
Я знаю об условном атрибуте и отладчикеHiddenAttribute и использую оба (хотя последнее, похоже, игнорируется пользовательской сборкой MonoDevelop в комплекте с Unity). При поиске решения этой проблемы я столкнулся с тремя атрибутами в пространстве имен System.Runtime.CompilerServices
, которые, похоже, связаны с тем, что я пытаюсь сделать: CallerFilePathAttribute, CallerLineNumberAttribute и CallerMemberNameAttribute. (В моей реализации, я использую System.Diagnostics.StackTrace
с fNeedFileInfo == true
вместо этого.)
Я интересно, если есть, возможно, любое отражение магии (кажется маловероятным) или атрибут магии (кажется немного более вероятно), что может помочь мне достичь такую же функциональность как Я привык к C++.
Да, именно то, что я имел в виду. Поскольку вы предоставили рабочий код, я удалил свой ответ. –