这个
有什么不同DateTime thisTime = new DateTime();
和这个
DateTime thisTime;
谁是更好的表现,谁是更好的习惯。对于开始时,create具有相同的日期时间。我使用 thisTime 从具有8000行的文件中添加dateTime,方法为 ParseExact()。
答案 0 :(得分:4)
我将首先用不同的类型来解释这个问题,稍后你会明白为什么。
string myString;
这是一个变量声明。它在内存中分配一些空间,以便能够容纳string
个对象。但是,它不会用任何内容填充该空间。所以变量包含null
,这实际上意味着没有对象。
myString = "foo";
这是一个变量赋值。它用一些值填充之前分配的内存。该值是对包含"foo"
的字符串对象的引用。这意味着为变量准备的内存位置不包含字符串本身,而只是在其他地方找到它的注释。
string myString = "foo";
这将上述两者结合起来,直接初始化声明的变量。
现在,对于DateTime
,这有点不同。 DateTime
是一种值类型,这意味着该类型的变量不仅存储引用,而且存储对象的实际内容。另一个简单类型是int
,其中变量直接存储整数值。
由于值类型的变量直接包含值,因此它们不是引用,因此它们不能是null
。相反,声明的值类型变量将使用该类型的默认值自动初始化。
一般来说,这是通过使用default(TypeName)
来实现的,例如default(DateTime)
(这也适用于引用类型,例如返回default(string)
的{{1}}。对于值类型,null
恰好与default(DateTime)
相同。
但是,C#编译器通常会在您使用它们之前强制执行 explicitely 初始化变量。因此,即使在技术上,内存也会预先填充默认值,如果您没有明确设置值,编译器会抱怨。
因此,如果您想使用new DateTime()
,则必须为其指定值。但是,如果您计划分配完全不同的值,则不必为其分配默认值。所以,如果你是计划稍后使用thisTime
获取DateTime,然后将变量保持为未初始化,直到您分配它为止。
E.g。
ParseExact
答案 1 :(得分:2)
它们都没有区别,它们都在C#中返回默认值DateTime,即1/1/0001 12:00:00 AM,性能方面它们都是相同的。我建议使用第二个选项,因为它使用较少的代码。
在C#中DateTime是一个结构而不是一个类,因此它不能为空,并且无论你如何声明它都将始终默认为1/1/0001 12:00:00 AM。
不同的方式是:DateTime thisTime;
,DateTime thisTime = new DateTime();
和DateTime thisTime = default(DateTime);
此外,我建议您使用ParseExact
而不是TryParseExact
,因此如果字符串与格式不匹配,代码不会抛出异常。
DateTime thisTime;
if (DateTime.TryParseExact("Inputted Date", "Date Format",
System.Globalization.CultureInfo.InvariantCulture,
DateTimeStyles.None, out thisTime))
{
//success code
}
else
{
//failure code
}