gpt4 book ai didi

c# - 满足或静音可为空的泛型类型属性警告

转载 作者:行者123 更新时间:2023-12-03 17:12:43 31 4
gpt4 key购买 nike

在 C#8.0 中使用可空引用类型,给出这个简化的代码,其中 T 可以是任何值类型或引用类型,而空值是引用类型 T 实例的有效值:

public class C<T>
{
public T P { get; set; }
}
编译器发出警告 CS8618 "Non-nullable property 'P' is uninitialized. Consider declaring the property as nullable." .
我怎样才能满足编译器并消除这个警告(不抑制 CS8618)?
是否有我可以应用的属性或类型参数约束?那种情况怎么办?
我想出的最好的是
public T P { get; set; } = default!;
但我希望有一种方法可以在不使用 null-forgiving/“dammit” 运算符('!')的情况下做到这一点。
注:您不能将属性的类型声明为 T? - CS8627。此外,这意味着返回的任何值类型都是 Nullable<T> ,这不是预期的。 ( Read more about this e.g. here. )

编辑:我注意到这也有效:
public class C<T>
{
public C()
{
P = default;
}
[AllowNull]
public T P { get; set; }
}
但是,我更愿意使用自动属性初始化程序。

最佳答案

基本上,classstruct可空性只是不兼容,不能组合。

您的选择包括:

  • 保持你的类完全通用;因此,在您的类(class)中 T 之间没有区别和 T? .这仍然允许 C<int>C<int?> ,只是不是 T? .
  • 限制为 classstruct ,取决于您的要求。
  • 编写两个单独的类,一个用于结构,一个用于引用类型。

  • 如果它们足够简单,编写两个类也不错。您可以将非通用部分推送到基类中以避免过多重复。

    关于c# - 满足或静音可为空的泛型类型属性警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215280/

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