我正试图调用两个函数ShowInventories和DoTransaction。这两个函数都在“ #if”中。我不确定'#if'是什么意思,或者是否有指定方法可以从中调用函数。
我只是试图调用ShowInventories和DoTransaction函数,然后像这样通过它们运行我需要执行的操作:
ShowInventories(Thing being sent through);
DoTransaction(Thing being sent through);
#if语句如下:
#if INVENTORY
static void ShowInventories(string playerName, Inventory playerInv, Inventory storeInv)
{
Console.SetCursorPosition(2, 2);
Console.Write(playerName + "'s inventory: ");
playerInv.DisplayInventory(4, 3);
Console.SetCursorPosition(39, 2);
Console.Write("The Store's inventory: ");
storeInv.DisplayInventory(41, 3);
}
static void DoTransaction(string playerName, Inventory playerInv, Inventory storeInv, bool buy)
{
if (buy)
{
DoBuy(playerName, playerInv, storeInv);
}
else
{
DoSell(playerName, playerInv, storeInv);
}
}
...
#endif
我不知道两个函数中的代码是否重要,但是我以两种方式都将它们放入。他们正在代码中的其他位置调用其他函数,但我不确定要包含它是否重要。
问题在于,它告诉我“即使在当前上下文中这两个函数都不存在”,即使通过该代码下面的“ #if”也是如此。我也不明白“ #if”是什么,如果有人可以帮我解决问题,我将非常感激。谢谢你。
答案 0 :(得分:2)
#if
是我们所谓的预处理程序指令。这就是说,在编译代码时,编译器将仅包含内部内容
#if DEBUG
.....
#endif
在您的项目中声明了属性DEBUG
时(例如,如果它处于DEBUG模式,通常会使用该属性)。
所以在您的代码中您拥有
#if INVENTORY
static void ShowInventories(string playerName, Inventory playerInv, Inventory storeInv)
{
......
}
#endif
但是由于您的项目属性未声明INVENTORY
,因此#if
中的代码未包括在内,编译器无法找到方法。
答案 1 :(得分:2)
这听起来像preprocessor directive,#if
和#endif
之间包含的代码只有在声明了相关符号的情况下才会编译。对于各种构建配置,将声明不同的符号。
通常仅在“调试”构建配置中声明DEBUG
符号,而不在“发布”配置中声明。这样可以轻松地为发布版本省去昂贵的配置文件代码。
通常,缺少符号时,Visual Studio将使代码变灰。如果尝试从不包含此代码的版本中访问此代码,则会出现编译器错误。
要小心,因为过度使用这些指令 可能是代码的味道,请参见Quote needed: Preprocessor usage is bad OO practice