Создание макросов в C # - PullRequest
2 голосов
/ 24 июня 2010

Есть ли способ создания макросов в c #

например:

string checkString = "'bob' == 'bobthebuilder'" (это будет динамически)

if (@@ checkString) // ......... еще //.........

Спасибо

Ответы [ 4 ]

1 голос
/ 24 июня 2010

Как уже упоминалось, нет, но есть ряд других подходов:

  • Условная компиляция через #if
  • Создание шаблонов через T4 или что-то еще (мы используем порт (упомянутый) Неда Батчелдера)
  • Аспектно-ориентированное программирование через что-то вроде PostSharp
  • Как сказал Джон, много способов; было бы лучше точно описать, что вы хотите сделать.
1 голос
/ 24 июня 2010

T4 в наши дни набирает обороты для работы .NET.Это не совсем то, о чем вы просили, но в некоторых случаях это может быть чрезвычайно полезно (или это может быть просто подсказка по неверному пути ).

В большинстве случаев, esp.с дженериками я не хочу использовать «шаблоны» или «макросы» в C # (или в Scala).В приведенном выше примере вы можете просто использовать:

bool sameStuff = "'bob' == 'bobthebuilder'";
...
if (sameStuff) {
  ...
}

Более сложные случаи, как правило, могут иметь дело с методами рефакторинга или с использованием анонимных функций.

Кроме того, атрибуты (хотя это совершенно другой подход)Завершают дело о многих «традиционных» применениях шаблонов.

1 голос
/ 24 июня 2010

Нет, в C # нет макросов.Вы можете зафиксировать свою логику в делегате и применить этот делегат в нескольких местах, потенциально ... это поможет?

Если бы вы могли описать проблему, которую вы пытаетесь решить, а не решение, которое, как вы думаете, вы 'Мне бы хотелось, чтобы мы могли помочь больше.

0 голосов
/ 24 июня 2010

Краткий ответ: Нет.

Длинный ответ: Вы можете написать обертку вокруг препроцессора компилятора C / C ++.

Большая часть синтаксиса будет принята с заметным исключением # region / # endregion. Вы можете просто поставить префикс перед их обработкой #pragma, а потом удалить часть #pragma.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...