是否在编译时对C#中的文字进行了算术运算?

Noe*_*mer 6 c# performance literals

很短的问题,但我现在无法在网上找到解决方案.

int test = 1 + 2;
Run Code Online (Sandbox Code Playgroud)

1 + 2在运行或编译时执行?

问的理由:我认为大多数人有时会使用文字而没有说明为什么使用它或它意味着什么,因为他们不想通过运行计算浪费一点性能,我相信计算在编译期间发生并且对性能:

int nbr = 31536000; //What the heck is that?
Run Code Online (Sandbox Code Playgroud)

代替

int nbr = 365 * 24 * 60 * 60; //I guess you know what nbr is supposed to be now...
Run Code Online (Sandbox Code Playgroud)

Rio*_*ams 4

由于您的示例本质上是常量表达式(即它们仅包含常量或这样评估的结构),因此它们将在编译时评估

\n\n
\n

常量表达式是可以在编译时完全求值的表达式。

\n\n

常量表达式的类型可以是以下类型之一:sbyte、byte、short、ushort、\n int、uint、long、ulong、char、float、double、decimal、bool、string、\n 任何枚举类型,或者空类型。

\n
\n\n

常量表达式中允许使用以下结构:

\n\n
    \n
  • 文字(包括空文字)。
  • \n
  • 对类和结构类型的 const 成员的引用。
  • \n
  • 对枚举类型成员的引用。
  • \n
  • 带括号的子表达式,它们本身就是常量表达式。
  • \n
  • 强制转换表达式,前提是目标类型是上面列出的类型之一。
  • \n
  • 预定义的+\xe2\x80\x93!~一元运算符。
  • \n
  • 预定义的+\xe2\x80\x93*/%<<>>&|^&&||==!=<><=>=二元运算符,前提是每个操作数属于上面列出的类型。
  • \n
  • 条件?:运算符。
  • \n
\n