gpt4 book ai didi

c# - 猫王运算符 ?.奇怪的是在明显的情况下无法编译

转载 作者:行者123 更新时间:2023-11-30 13:25:50 27 4
gpt4 key购买 nike

这个静态方法编译:

public static void Foo<TValue>(Func<TValue> factory = null)
{
factory?.Invoke();
}

为什么不呢?然而,这个不是:

public static void Foo<TValue>(Func<TValue> factory = null)
{
var x = factory?.Invoke();
}

使用返回值似乎有所不同:

enter image description here

当然是运算符?.不适用于 TValue 类型的操作数, 但属于 Func<TValue> 类型之一,这就是它在不使用表达式值时起作用的原因。

非通用案例工作得很好:

public static void Bar(Func<String> factory = null)
{
var x = factory?.Invoke();
}

最佳答案

尝试添加 where TValue: class 以确保 TValue 可以是 null:

static void Foo<TValue>(Func<TValue> factory = null) where TValue: class

在这种情况下,编译器可以将 x 的类型推断为 TValue 并在需要时将 null 分配给它(例如在 factory == null).

或者试试

static void Foo<TValue>(Func<TValue> factory = null) where TValue: struct

在这种情况下,推导的类型将是 TValue?。 (致谢 @hvd。)

关于c# - 猫王运算符 ?.奇怪的是在明显的情况下无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401839/

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