gpt4 book ai didi

c# - 如何标记通用委托(delegate)以接受空值?

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:48 25 4
gpt4 key购买 nike

Nullable reference types激活,如何授权一个Func参数为空?

public void Test<TIn, TOut>(Func<TIn, TOut> func)
{
var r = func(default); // default may be null, I got an error.
}

目前我用以下方法解决这个问题:

public void Test<TIn, TOut>(Func<TIn, TOut> func)
{
var r = func(default!); // null it is !
}

但我只是想标记 func 在输入中接受空值:

public void Test<TIn, TOut>(Func<TIn?, TOut> func) // do not work
{
var r = func(default);
}

我还尝试构建自己的委托(delegate):

public delegate TOut Dunc<in TIn, out TOut>(TIn? in);

但随后出现错误:请将 TIn 标记为类或结构。

最佳答案

编辑

下面的代码(来自 here)现在在 C# 9 中是合法的

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

原始答案

T?可能有不同的含义

  • 如果T是一个结构,它是 Nullable<T> 的别名
  • 如果T是一个类它是一个加糖的NullableAttribute告诉编译器我们在这里允许空引用。

标记一个泛型方法或委托(delegate)某些参数或返回值可能是空引用。我们可以强制泛型类型成为引用并使用 ?

T? Result<T>() where T : class;

或者我们可以使用 notnull为这种情况建立的约束:

T? Result<T>() where T : notnull;

关于c# - 如何标记通用委托(delegate)以接受空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863932/

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