2

因为我什至不知道这种类型的结构叫什么,我不知道如何开始寻找答案,所以我直接问:C++ 中这段代码的 C# 语法等价物是什么?

#define DoExit { \
    if (pDialog) delete pDialog; \
    if (lib) FreeLibrary(lib); \
    if (MadeNew) delete pRS; \
    return retval;}

这是从类方法中获取的,因此它是稍后调用的函数的内联声明。事实上,这是一个使用它的例子:

if (pRS->GetSize() == 0) DoExit

请注意缺少()分号或终止分号。

我的第一个猜测是某种内联委托构造,但我也不精通这些,所以这只是一个猜测。

所以,你所有的 C++ 大师都在那里!

4

3 回答 3

2

此代码在 C# 中的等价物是

;

因为:

delete something

由垃圾收集器完成,因此不需要这样做。库(即程序集由 .NET 框架管理,因此严格来说,您不管理程序集的加载卸载,除非您正在加载非托管库)您可以找到等效的单个部分是FreeLibrary如果您在LoadLibrary P/Invoke其他地方做了。在这种情况下,请看这里:FreeLibrary

于 2013-05-31T05:16:02.237 回答
1

这是 C++ 中的一个宏 - 您基本上只需添加该代码,因此“实际”代码将是:

if (pRS->GetSize() == 0)
{ 
    if (pDialog) delete pDialog;
    if (lib) FreeLibrary(lib); 
    if (MadeNew) delete pRS; 
    return retval;
}

没有办法直接在 C# 中进行等效操作。您需要手动扩展代码,然后根据需要移植扩展的代码,或者将宏转换为方法并调用它。

于 2013-05-29T19:46:18.367 回答
0

What you've encountered is called a macro. There is no equivalent in C#.

于 2013-05-29T19:45:59.040 回答