在C#中模拟宏的最佳方法是什么?

时间:2015-02-16 20:18:31

标签: c# asynchronous macros async-await

由于C#不支持宏,我正在寻找另一种(希望是优雅的)方法来编写一个方法,该方法根据条件编译符号返回不同类型的值。例如。 (如果可以使用宏)

#if ASYNC
  #define ASYNC_VOID async Task
#else
  #define ASYNC_VOID void
#endif

...

ASYNC_VOID Connect()
{
  ...
}
ASYNC_VOID Disconnect()
{
  ...
}
ASYNC_VOID Post()
{
  ...
}
ASYNC_VOID Delete()
{
  ...
}

我最好不要单独创建Connect和ConnectAsync方法,因为它们不需要同时在程序集中共存,并且代码重复会过多(感谢async / await模型,同步和异步版本是非常接近)。

我宁愿留下一个方法,只需让它以同步和异步模式编译。

是否有可能或者我总是要为每种方法都写这个?

#if ASYNC
  async Task
#else
  void
#endif
Connect()
{
  ...
}

1 个答案:

答案 0 :(得分:1)

下面。您在下面有一个C#preprocessor directives的示例。你也可能需要这个/define compiler directive,但请注意源头开头的#define。

您还有conditional methods

现在永远不要使用它。

#define abc   
namespace ConsoleApplication2
{
    class Class5
    {
        public
#if abc
 int
#else
    string
#endif
 Foo()
        {
#if abc
            return 7;
#else
    return "aa"
#endif
        }

        public void Bar()
        {
            #if abc
            int
#else
    string
#endif
 thing = Foo();
        }
    }
}