gpt4 book ai didi

c# - 为什么我不能将 Foot?> 转换为 Foot>

转载 作者:行者123 更新时间:2023-12-05 04:23:52 24 4
gpt4 key购买 nike

我有一个通用结构“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 转换为 Foo。

最佳答案

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

正确处理此转换的一种方法是使用 null 合并运算符来检查它是否为 null,如果是,则为其提供回退值

在此代码段中,我选择使用 default operator .自 FileProperty是一个结构,它将默认为一个结构,其中 value为空且 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");

关于c# - 为什么我不能将 Foot?> 转换为 Foot>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73635477/

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