C#编译报错CS1503:无法将long?类型转换为long如何解决?
错误产生原因
long? 是C#中的可空值类型,本质为 Nullable<long>,即使你已经通过 ticks != null 判定其有有效值,该变量本身的类型依然是可空类型,无法直接隐式转换为 DateTime 构造函数要求的 long 类型参数,因此编译器抛出CS1503错误。
修复方案
可通过以下任意一种方式修复:
- 方案一:调用可空类型的
Value属性获取实际存储的long值,由于你已经做了非空校验,该操作不会抛出异常
public static void Add(long? ticks) { if (ticks != null) { new DateTime(ticks.Value); } }
- 方案二:使用空合并运算符给定默认值,省去单独的非空判断逻辑,示例中null场景默认传0作为ticks参数,你可以根据业务需求调整默认值
public static void Add(long? ticks) { new DateTime(ticks ?? 0); }
- 方案三:搭配可空类型的
HasValue属性做非空判断,语义和ticks != null完全等价
public static void Add(long? ticks) { if (ticks.HasValue) { new DateTime(ticks.Value); } }
内容的提问来源于stack exchange,提问作者m4design
相关产品推荐
相关产品推荐

