gpt4 book ai didi

c# - 不能使用 lambda 表达式作为动态调度的参数

转载 作者:行者123 更新时间:2023-11-30 14:23:47 27 4
gpt4 key购买 nike

我在 C# 中有一个并发字典:

private static ConcurrentDictionary<string, dynamic> cache =
new ConcurrentDictionary<string, dynamic>();

我正在尝试向字典添加或更新动态值

public void SetCache(string key, dynamic value)
{
cache.AddOrUpdate(key, value, (k, v) => value);
}

但我收到以下错误。代码有什么问题? Example here .

Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type.

最佳答案

我认为错误信息非常清楚。

匿名 lambda 可以表示委托(delegate)(并且可以有许多匹配的委托(delegate)类型)或表达式树。在分配给特定类型的变量或在需要特定类型的上下文中使用之前,它本身没有类型。当使用常规(非动态)类型时,编译器通常可以推断出目标类型(例如 Func<string, string> )。但是,当涉及动态类型时——编译器无法做到这一点,因为所有解析现在都在运行时执行,而不是在编译时执行。所以编译器不会分配类型 Func<string, dynamic, dynamic>到你的 lambda,你应该自己做(正如编译器建议的那样):

cache.AddOrUpdate(key, value, (Func<string, dynamic, dynamic>) ((k, v) => value));

Example here.

关于c# - 不能使用 lambda 表达式作为动态调度的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890447/

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