如何正确处理“ List <T> .Add(默认)”?

考虑以下在#nullable上下文中使用 .Net Framework 4.8 编译的代码:

public sealed class Test<T>
{
    public Test()
    {
        _data.Add(default); // warning CS8604: Possible null reference argument for parameter 'item' in 'void List<T>.Add(T item)'.
    }

    public T Item => _data[0];

    readonly List<T> _data = new List<T>();
}

此代码会引起警告CS8604,如注释所示。

在没有约束T?T的情况下使用class来修复代码是 的可能性:

public sealed class Test<T>
{
    public Test()
    {
        _data.Add(default);
    }

    public T? Item => _data[0];                // error CS8627: A nullable type parameter must be known to be a value type or non-nullable reference type

    readonly List<T?> _data = new List<T?>();  // error CS8627: A nullable type parameter must be known to be a value type or non-nullable reference type
}

我无法添加“结构”或“类”类型的约束,因为此代码实际上位于PriorityQueue<T>类中,该类已经在很多地方使用了值和引用类型。

所以我现在要做的只是像这样抑制消息:

public Test()
{
    _data.Add(default!); // Note the "!"
}

这是处理此问题的正确方法吗(假设它必须与.Net Framework 4.8配合使用,因此新的与空相关的代码注释不可用)?

iCMS 回答:如何正确处理“ List <T> .Add(默认)”?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2120877.html

大家都在问