В C можно написать функцию макроса, которая заменяет вход ввода как строку.Директива стиля c в C#, которая позволяет использовать одно выражение дважды #define x (k) {#k, k}
#define x(k) {#k, k}
'(4)' будет генерировать '{ "4", 4}'
У меня есть USECASE в C#, где я хочу передать входной сигнал, как это к испытанию блока.
private void AssertInt64Expression(Int64 i, string str)
{
Assert.AreEqual(i, MathFactory.make(str));
}
[Test]
public void ParseBasic()
{
AssertInt64Expression(4, "4");
AssertInt64Expression(2+3, "2+3");
AssertInt64Expression(7-11, "7-11");
AssertInt64Expression(7-11 *2, "7-11 *2");
AssertInt64Expression(7 - 11 * 2, "7 - 11 * 2");
}
Я по существу повторяет информацию (включая пробелы) здесь, как я могу использовать что-то вроде макроса с стиле, чтобы решить эту проблему в C#?
редактировать:
по существу я хотел бы написать:
private void AssertInt64Expression(GeneratorMagic magic)
{
Assert.AreEqual(magic.ToCode(), MathFactory.make(magic.ToString()));
}
[Test]
public void ParseBasic()
{
AssertInt64Expression(<#7 - 11 * 2#>);
}
Я знаю, что это не будет компилироваться.
редактировать:
Я добавил фрагмент кода в ответ, чтобы проиллюстрировать то, что я ищу. Однако этот фрагмент работает очень медленно, так как мне нужно его реорганизовать мои модульные тесты в более чистый код с меньшим количеством повторений. Мне нужно, чтобы фрагмент работал быстрее. Фрагмент по существу обеспечивает magic
из предыдущего редактирования как KeyValuePair
.
Не уверен, что на самом деле вы пытаетесь сделать, но [Генерация кода и T4 текста Шаблоны] (http://msdn.microsoft.com/en-us/library/bb126445.aspx) может помочь. –
В соответствии с вашим [комментарием] (http://stackoverflow.com/questions/709463/c-sharp-macro-definitions-in-preprocessor#comment40110288_709475) вы нашли вопрос [Определения макросов C# в препроцессоре] (http: //stackoverflow.com/questions/709463/c-sharp-macro-definitions-in-preprocessor). На ваш вопрос не ответил (ответ «Нет»)? – CodeCaster
@CodeCaster Я нашел ответ, и я не ищу препроцессор. У меня есть usecase, где я хочу писать somethign один раз, а не дважды, и я смотрю, как это делается на C#. Кажется маловероятным, что это невозможно. – Johannes