![](/img/trans.png)
[英]Why can't I pass a List<List<Foo>> to an IEnumerable<IEnumerable<Foo>>
[英]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.