Уже есть несколько предложений для достижения желаемого. Либо используйте объект StackTrace, либо лучше log4net.
В Java для получения этой информации мне пришлось вызвать исключение и перехватить его.
Это не совсем так. Вы также можете получить это без исключения исключений. Взгляните на log4j. Он даже регистрирует ваш метод и имя класса, не загрязняя ваш код жестко закодированными строками, содержащими текущее имя метода (по крайней мере, я видел это в некоторых случаях).
Почему эти старые резервные компоненты так игнорируются в современных языках программирования?
Java и C # не используют (в последнем случае чрезмерное использование) препроцессоров. И я считаю, что это хорошо. Очень легко использовать препроцессоры для создания нечитаемого кода. И если программисты могут злоупотребить какой-либо техникой ... они будут злоупотреблять ею.
Просто примечание о производительности, которое, скорее всего, будет следующим, что придет вам в голову:
Если вы используете StackTrace или log4net, вы всегда будете читать или слышать, что он медленный, потому что он использует Reflection. Я использую log4net и никогда не сталкивался с тем, что ведение журнала является узким местом для производительности. Если бы это было так, я могу декларативно деактивировать (части) ведение журнала - без изменения исходного кода. Это чистая красота по сравнению с удалением всех строк журнала в коде C / C ++! (Кроме того: если производительность является основной целью, я бы использовал C / C ++ ... он никогда не умрет, несмотря на Java и C #.)
макросы снова являются функцией препроцессора. Имя макроса заменяется в коде телом макроса перед его компиляцией. В C # нет макросов.
– Ed S.31 марта 2009, 02:06Мне нужно узнать об условных компиляциях в приложении C #, но доступно даже больше информации, чем я предполагал. Мне также нужно узнать о макросах и их поддержке на C #. Спасибо за ответ.
– ojblass30 марта 2009, 23:26… и поэтому вам действительно следует заключить такой код в блок #if DEBUG #endif
– Peter Lillevold30 марта 2009, 07:12