gpt4 book ai didi

c# - C# 8 中可空类型和泛型的问题

转载 作者:行者123 更新时间:2023-12-03 14:34:51 24 4
gpt4 key购买 nike

添加后 <Nullable>enable</Nullable> or #nullable enable ,我的通用方法遇到了以下问题:

这不起作用:

public T? GetDefault<T>()
{
return default;
}

enter image description here

这适用于警告:

public T GetDefault<T>()
{
return default;
}

enter image description here

这单独工作,但不能一起工作。

public T? GetDefault<T>() where T : class
{
return default;
}

public T? GetDefault<T>() where T : struct
{
return default;
}

enter image description here

从逻辑上讲,第一种方法应该有效。
在不创建多种方法和抑制警告的情况下,摆脱这种情况的正确方法是什么(在任何框架中)?
[MaybeNull] 属性仅适用于 .Net Core 3.0+。

另外,我问了这个问题 here

最佳答案

T?只能在类型参数已知为引用类型或值类型时使用。否则,我们不知道是否将其视为 System.Nullable<T> 或作为可空引用类型 T .

相反,您可以使用 [MaybeNull] 在 C# 8 中表达这种情况。属性。

#nullable enable
using System.Diagnostics.CodeAnalysis;

public class C
{
[return: MaybeNull]
public T GetDefault<T>()
{
return default!; // ! just removes warning
}
}

此属性仅包含在 .NET Core 3.0+ 中,但可以在项目内部声明和使用该属性(尽管这不受官方支持,但没有理由假设该行为会破坏线路)。为此,您只需在代码中添加命名空间+类声明,如下所示:
namespace System.Diagnostics.CodeAnalysis
{
/// <summary>Specifies that an output may be null even if the corresponding type disallows it.</summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]
internal sealed class MaybeNullAttribute : Attribute { }
}

关于c# - C# 8 中可空类型和泛型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61921406/

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