这有什么区别
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)
(这也适用于引用类型,例如返回 null
的 default(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/