gpt4 book ai didi

c# - 动态不尊重返回类型

转载 作者:太空狗 更新时间:2023-10-29 22:57:54 29 4
gpt4 key购买 nike

我对 C# dynamic 关键字很陌生。在我的一个项目中,我尝试使用它并遇到了一些意想不到的行为。我设法用以下代码重现了这种情况:

class Program
{
static DateTime? DateOnly(DateTime? time)
{
return time.HasValue ? (System.DateTime?)time.Value.Date : null;
}

static void Main(string[] args)
{
dynamic now = System.DateTime.Now;
var date = DateOnly(now);
Console.WriteLine(date.Value); // error thrown here
Console.Read();
}
}

我收到一个 RuntimeBinderException 语句

'System.DateTime' does not contain a definition for 'Value'.

因此变量 date 被视为 DateTime 而不是 DateTime?

看起来 dynamic 以某种方式忽略了返回类型声明。我应该避免将 vardynamic 一起使用吗?

最佳答案

因为您将 dynamic 变量传递给 DateOnly 方法,所以返回类型也变为动态。所以在这种情况下,您的 var date 实际上是 dynamic date。它包含一个装箱的可空 DateTime,但装箱不保留“可空”部分,所以实际上它只是一个装箱的 DateTime,它没有 属性。因此,您应该只执行 Console.WriteLine(date) 来打印值。

如您所见,可空类型和 dynamic 不能很好地协同工作...

关于c# - 动态不尊重返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756016/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com