C# 当我们使用new关键字创建新的DateTime(对象)时
这两者有什么不同C# 当我们使用new关键字创建新的DateTime(对象)时,c#,C#,这两者有什么不同 DateTime thisTime = new DateTime(); 还有这个 DateTime thisTime; 谁是更好的表现,谁是更好的实践。对于开始时间,创建的日期时间相同。我使用ThistTime从有8000行的文件中添加dateTime,方法是ParseExact()。我将首先用不同的类型解释这一点,稍后您将看到原因 string myString; 这是一个变量声明。它在内存中分配一些空间,以便能够容纳string对象。但是,它不会用任何内容填充该空间。
DateTime thisTime = new DateTime();
还有这个
DateTime thisTime;
谁是更好的表现,谁是更好的实践。对于开始时间,创建的日期时间相同。我使用ThistTime从有8000行的文件中添加dateTime,方法是ParseExact()。我将首先用不同的类型解释这一点,稍后您将看到原因
string myString;
这是一个变量声明。它在内存中分配一些空间,以便能够容纳string
对象。但是,它不会用任何内容填充该空间。因此变量包含null
,这本质上意味着没有对象
myString = "foo";
这是一个变量赋值。它用一些值填充之前分配的内存。该值是对包含“foo”
的字符串对象的引用。这意味着为变量准备的内存位置不包含字符串本身,而只包含一个注释,在其他地方可以找到它
string myString = "foo";
这结合了以上两种方法,并直接初始化声明的变量
现在,对于
DateTime
这有点不同DateTime
是一种值类型,这意味着该类型的变量不仅存储引用,而且存储对象的实际内容。另一种简单类型是int
,其中变量直接存储整数值
由于值类型的变量直接包含值,因此它们不是引用,因此不能为null
。相反,值类型的声明变量将自动初始化为该类型的默认值
通常,这是通过使用default(TypeName)
实现的,例如default(DateTime)
(这也适用于引用类型,例如返回null的default(string)
)。对于值类型,default(DateTime)
恰好与newdatetime()相同
然而,C#编译器通常会强制您在使用变量之前显式初始化变量。因此,即使从技术上讲,如果没有明确设置一个值,编译器也会抱怨内存将预先填充默认值
因此,如果您这次想使用,
,您必须给它赋值。但是,如果仍要指定完全不同的值,则不必为其指定默认值。因此,如果您计划稍后使用ParseExact
来获取日期时间,则只需将变量保持未初始化状态,直到您分配它
例如
它们都返回C#中的DateTime默认值,即1/1/0001 12:00:00 AM,在性能方面它们都是相同的。我建议使用第二个选项,因为它使用的代码更少
在C#中,DateTime是一个结构而不是类,因此它不能为null,并且无论如何声明,它都将始终默认为1/1/0001 12:00:00 AM
不同的方式是:DateTime代码>,DateTime thisttime=new DateTime()代码>和DateTime thisTime=默认值(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
}
我们在创建类型实例时使用new关键字。对于值类型,这不是强制性的,但对于引用类型ParseExact
需要一个out参数,因此其用法就像您有一个输入,您需要一个DateTime
输出。
DateTime thisTime;
if (DateTime.TryParseExact("Inputted Date", "Date Format",
System.Globalization.CultureInfo.InvariantCulture,
DateTimeStyles.None, out thisTime))
{
//success code
}
else
{
//failure code
}