如何解决为什么这个不编译?无法从“X”转换?到“X”
我遇到了一个意想不到的问题(或者这是预期的行为?)。以下代码未编译,它给了我错误:
CS1503 Argument 1: cannot convert from 'long?' to 'long'
public static void Add(long? ticks)
{
if (ticks != null)
{
new DateTime(ticks);
}
}
解决方法
没有从 Nullable<T>
到 T
的隐式转换 - 您可以通过强制转换显式完成,例如new DateTime((long) ticks)
,或使用 Value
属性,例如new DateTime(ticks.Value)
。
作为我现在通常更喜欢的替代方案,您可以使用 C# 7 中的模式匹配使其稍微简单一点,在您检查它是的同一步骤中提取非空值> 非空:
public static void Add(long? ticks)
{
// This will match if ticks is non-null,and assign the value
// into the newly-introduced variable "actualTicks"
if (ticks is long actualTicks)
{
var dt = new DateTime(actualTicks);
// Presumably use dt here
}
}
,
您可以从 long
隐式扩大到 long?
,但不能从 long?
隐式缩小到 long
。
你需要这样做:
public static void Add(long? ticks)
{
if (ticks != null)
{
new DateTime(ticks.Value); // or (long)ticks
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。