usr*_*020 1 c# generics .net-core nullable-reference-types
我.NET在.NET Core控制台应用程序中使用5 。以下代码无法编译:
public class NullableClass<T?>
{
}
Run Code Online (Sandbox Code Playgroud)
错误是:
错误 CS1003 语法错误,“,”预期。
我是否使用任何约束都没有关系。
但这段代码编译:
[return: MaybeNull]
public static T? Find<T>(IEnumerable<T?> sequence, Func<T?, bool> predicate)
{
foreach (var element in sequence) {
if (predicate(element)) return element;
}
return default(T?);
}
Run Code Online (Sandbox Code Playgroud)
当我声明Find<T?>我有同样的错误。
我在这里不明白什么?
如果你想T成为一个可以为空的引用类型,你应该使用一个泛型约束:
哪里T:上课?
类型参数必须是引用类型,可以为空或不可为空。此约束也适用于任何类、接口、委托或数组类型。
public class NullableClass<T> where T : class?
{
// code here
}
Run Code Online (Sandbox Code Playgroud)
请注意,问号是约束的一部分 - 还有一个约束class(不带问号)表示“引用类型”,在 c# 8 或更高版本中表示“不可为空的引用类型”。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |