繁体   English   中英

为什么我不能转换 Foo<t?> 给富<t></t></t?>

[英]Why can I not convert Foo<T?> to Foo<T>

我有一个通用的 Struct “FileProperty”,它由一个 int 'offset' 和一个 T 'value' 组成。 如果我执行以下操作..:

FileProperty<long?> fp1 = new FileProperty(value: null, offset: 0);
fp1.value = 1;

..以下工作均未完成:

FileProperty<long> fp2;
fp2 = fp1;                       // Cannot implicitly convert type 'Database.FileProperty<long>' to 'Database.FileProperty<long?>'
fp2 = (FileProperty<long>) fp1;  // Cannot convert type 'Database.FileProperty<long>' to 'Database.FileProperty<long?>'

即使我写了一个明确的转换,我也会得到:
'用户定义的运算符不能将类型转换为自身'
这是有道理的,但对我没有帮助。

我遇到的问题是我知道'T? != null'但我无法将 Foo<T?> 转换为 Foo。

这是由于Foo<Nullable<T>>Foo<T>之间的差异。 这些是非常不同的类型,并且以严格类型的名义阻止强制转换,因为它需要知道可空性已被预先处理

您可以使用 null 合并运算符来检查其 null 是否,如果是,请为其提供“后备”值

在这个片段中,我选择使用默认操作符 由于FileProperty是一个结构,它默认为一个结构,其value null, offset为 0。

如果这是不可取的,请将其换掉以满足您的需要

FileProperty<long?> fp1 = new FileProperty(value: 1, offset: 0);

FileProperty<long> fp2 = fp1 ?? default(FileProperty<long>);

如果它的 null

FileProperty<long> fp2;
if (fp1 != null) fp2 = fp1;
else throw new Exception("No");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM