在这篇文章之后(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