ASP.Net C# #if/endif(如何使用)



在这篇文章之后(ASP.Net Core 2.1 Razor 页面((我的代码遇到了问题。 在访问 Student\Student.cshtml.cs 页面的 GitHub 存储库时,作者上传了一个充满 #if/#endif 语句的页面,但没有解释(在文章中(如何使用这些语句。(这是示例文档(

搜索中返回的唯一链接似乎将我指向 Miscrosoft.com。(尽管访问了许多链接,但我仍然对这些工作方式感到茫然 - 说很多东西而实际上什么都不说似乎是一种Microsoft趋势(

我发现的内容意味着 #If/#endif 语句正在寻找在某处配置文件中定义的值?但是示例代码没有(对我来说很明显(对配置文件的引用。

你能告诉我这个示例代码是如何工作的吗? 我想确保我可以消除 #if/#Endif 语句作为我的问题的可能原因。 谢谢

#if#endif是 C# 预处理器指令。C# 预处理器指令用于帮助进行条件编译。

如果您链接到的源代码的情况,则第 29 行有#if SortFilterPage,第 33 行有#else,第 35 行有#endif。第 29 行表示如果定义了SortFilterPage,则编译将包括第 30 行到 32 行,不包括第 34 行。同样,编译的代码将包括从第 117 行到第 168 行的行。

另一方面,如果在编译期间未定义SortFilterPage,则编译中将不包括第 30 行到第 32 行,第 117 行到 168 行也是如此,但第 34 行将包含在内。

正如您所注意到的,SortFilterPage实际上是由第 1 行的#define指令在源代码中定义的。但是,您可以删除该定义,而是在使用命令行生成工具运行编译时定义它。

您可以将第 1 行更改为具有#define SortFilter。这意味着SortFilterPage将是未定义的(假设它不是在通过命令行工具编译时定义的(。在这种情况下,它将更改包含哪些行进行编译。例如,第 81 行到第 114 行将包含在已编译的代码中。

延伸阅读:

  • https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives/
  • https://www.c-sharpcorner.com/article/C-Sharp-language-preprocessor-directives/
  • https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

相关内容

最新更新