c# - 当我们使用 new 关键字创建新的 DateTime(对象)时

标签 c#

这有什么区别

DateTime thisTime = new DateTime();

还有这个

DateTime thisTime;

谁的性能更好,谁的习惯更好。对于开始时创建具有相同的日期时间。我使用 thisTime 从具有 8000 行的文件中添加日期时间,方法是 ParseExact()

最佳答案

我将首先用不同的类型来解释这一点,稍后你会明白为什么。

string myString;

这是一个变量声明。它在内存中分配一些空间来容纳 string 对象。但是,它不会用任何内容填充该空间。所以变量包含 null,这实际上意味着没有对象。

myString = "foo";

这是一个变量赋值。它用一些值填充之前分配的内存。该值是对包含 "foo" 的字符串对象的引用。这意味着为变量准备的内存位置不包含字符串本身,而只是一个可以在其他地方找到它的注释。

string myString = "foo";

这结合了上面的内容并初始化直接声明的变量。


现在,对于 DateTime 这有点不同。 DateTime 是一种值类型,这意味着该类型的变量不仅存储引用,还存储对象的实际内容。另一种简单类型是 int,其中变量直接存储整数值。

由于值类型的变量直接包含值,它们不是引用,因此它们不能为null。相反,值类型的声明变量将自动初始化为该类型的默认值

一般来说,这是通过使用 default(TypeName) 来实现的,例如default(DateTime)(这也适用于引用类型,例如返回 nulldefault(string))。对于值类型,default(DateTime) 恰好与 new DateTime() 相同。

但是,C# 编译器通常会强制您在使用变量之前明确初始化变量。因此,即使从技术上讲,内存会预先填充默认值,如果您没有明确设置值,编译器也会报错。

所以如果你想使用thisTime,你必须给它赋值。但是如果您打算分配一个完全不同的值,则不必为其分配默认值。所以如果你例如计划稍后使用 ParseExact 来获取 DateTime,然后在分配变量之前保持变量未初始化。

例如

// do this
DateTime thisTime;
thisTime = DateTime.ParseExact(…);

// but not this
DateTime thisTime = new DateTime(); // or default(DateTime)
thisTime = DateTime.ParseExact(…);

关于c# - 当我们使用 new 关键字创建新的 DateTime(对象)时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33773310/

相关文章:

c# - 为什么 C# HttpWebRequest 会在 ResponseStream 上返回 500 错误,而 PHP 却不会?

c# - 获取 LINQ 列表中的所有子项

c# - 物理文件提供程序返回 404

c# - 我们如何用c sharp打开具有特定页码的word文件?

c# - 替换交互 View Genesys Workspace 桌面版

c# - Microsoft Hadoop Avro Serializer 不支持 IEnumerable<string>

c# - XML 到 CSV 使用 c# 而不使用 xslt

c# - ASP.NET MVC 中 htmlAttributes 的匿名类和 IDictionary<string,object> 之间的区别?

c# - Kendo 网格、虚拟滚动、页面大小和聚合

c# - 500 - 请求超时