为何Rider中可直接用DateTime,在线C#编译器却不行?
问题解答
核心原因就是JetBrains Rider默认自动给项目添加了using System;指令,具体差异细节如下:
- C#的基础规则:
DateTime、Console这类常用类型都属于System命名空间,C#编译器本身不会自动导入任何命名空间——你要么显式写using System;来导入整个命名空间,要么用System.DateTime这种完全限定名来引用类型,否则编译器根本找不到这些类型。 - Rider的默认行为:当你在Rider里创建标准的C#项目(比如控制台应用)时,项目模板会自动在代码文件顶部预填一批常用的
using指令,其中就包括using System;。你可以打开自己的代码文件看看顶部,肯定能找到这行语句,这就是你的代码能直接跑起来的原因。 - 在线运行平台的差异:rextester、Programiz这类在线工具的默认模板或者运行环境,并没有自动帮你添加
using System;。如果你直接粘贴那两行代码,编译器找不到DateTime和Console的定义,自然就报错了。解决起来也简单——要么在代码开头加上using System;,要么把类型改成完全限定名,比如写成System.DateTime now = System.DateTime.Now;和System.Console.WriteLine(now);,就能正常运行了。
内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows
相关产品推荐
相关产品推荐

