use*_*077 5 c# nullable c#-9.0
这个程序有两个错误:
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");
Run Code Online (Sandbox Code Playgroud)
T?必须是可空类型。不过好像和上面的程序T?是一样的T。
被?忽略T??
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");
Run Code Online (Sandbox Code Playgroud)
我不明白为什么约束会改变结果。
当您说T?inT?和 in 时(T? t),它们都指的是可为空的引用类型,而不是特殊的Nullable<T>结构。您无法指定泛型参数,以便将其视为类和可为空值类型。
第二个错误只是因为f(10)(so f<int>(10)) 被隐式地视为 an int(因为不存在可空引用 int 值之类的东西),所以null无效,就像您所做的那样if (10 is null)。
如果T停止打开,而是添加一个约束,例如where T : struct, ,而T?不是System.Nullable<T>可空引用参数,因此代码变得与引入可空引用类型之前完全相同。
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |