我有以下代码:
DateTime? toDate = null;
DateTime.TryParseExact(toDateTextBox.Text, "dd-MM-yyyy", null,
System.Globalization.DateTimeStyles.None, out toDate);
错误:无法从'out System.DateTime?'转换'out System.DateTime'
我想知道为什么无法将转化DateTime?
传递给DateTime
,尽管它实际上是从DateTime
转换为DateTime?
。
答案 0 :(得分:3)
out param需要完全相同的数据类型。传递的是对变量的引用,并且该引用随值更新。从DateTime和DateTime?实际上是两种不同的类型(无论它们之间的转换能力如何),调用失败。
答案 1 :(得分:2)
因为Nullable<DateTime>
到DateTime
之间不存在隐式转换。 (DateTime?
实际上是Nullable<DateTime>
)的语法糖。
Nullable结构的Value Property实际上具有valuetype的值。
答案 2 :(得分:1)
当您使用out
和ref
参数时,变量类型必须匹配参数类型。
主要原因是确保类型安全,看看这个例子有一个想法:
public static void Do(out object value)
{
value = new Foo();
}
string myStr;
Do(out myStr); // OMG I'm setting Foo inside a string !!
答案 3 :(得分:0)
无法从 System.DateTime?转换为 System.DateTime 因为这个out参数不需要可以为空的datetime类型变量。但是你要发送可以为空的datetime参数。