gpt4 book ai didi

c# - T?,C# 9 中的可为空类型参数

转载 作者:行者123 更新时间:2023-12-03 16:19:39 33 4
gpt4 key购买 nike

This program有两个错误:

using System;

T? f<T>(T? t)
{
t = null; // Error CS0403 Cannot convert null to type parameter 'T' because it could be a non-nullable value type
return default(T?);
}

if(f(10) is null) // Error CS0037 Cannot convert null to 'int' because it is a non-nullable value type
Console.WriteLine("null");
T?必须是可空类型。不过好像 T?T 相同在上面的程序中。
?T? 中被忽略?

编辑 : Both errors disappearstruct约束:
using System;

T? f<T>(T? t) where T : struct
{
t = null; // error
return default(T?);
}

if(f<int>(10) is null) // error
Console.WriteLine("null");
我不明白为什么约束会改变结果。

最佳答案

当你说 T?T?并在 (T? t) ,它们都指向可为空的引用类型,而不是特殊的 Nullable<T>结构。您无法指定泛型参数,以便将其视为类和可为空值类型。
第二个错误只是因为 f(10) (所以 f<int>(10) )被隐含地视为 int (因为没有可空引用 int 值这样的东西),所以 null无效,就像您这样做一样 if (10 is null) .

T停止打开,而是添加一个约束,例如 where T : struct , T?变成 System.Nullable<T>而不是可空引用参数,因此代码变得与引入可空引用类型之前完全相同。

关于c# - T?,C# 9 中的可为空类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65765396/

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