转换为out参数类型

时间:2011-04-04 08:50:47

标签: c# datetime

我有以下代码:

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?

4 个答案:

答案 0 :(得分:3)

out param需要完全相同的数据类型。传递的是对变量的引用,并且该引用随值更新。从DateTime和DateTime?实际上是两种不同的类型(无论它们之间的转换能力如何),调用失败。

答案 1 :(得分:2)

因为Nullable<DateTime>DateTime之间不存在隐式转换。 (DateTime?实际上是Nullable<DateTime>)的语法糖。

Nullable结构的Value Property实际上具有valuetype的值。

答案 2 :(得分:1)

当您使用outref参数时,变量类型必须匹配参数类型。

主要原因是确保类型安全,看看这个例子有一个想法:

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参数。