gpt4 book ai didi

c# - Expression>.Compile() 的实际类型是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:18 24 4
gpt4 key购买 nike

我想确保表达式不会被多次编译,所以我尝试将它们内存在字典中:

    static Dictionary<int, object> dict = new Dictionary<int, object>();
static T testmethod<T>(Expression<Func<T>> e) {
object result;
if (!dict.TryGetValue(1, out result)) {
result = e.Compile();
dict.Add(1, e);
}

return ((Func<T>)result)();
}


static void Main(string[] args) {

var firstTest = testmethod(() => default(int));
var secondTest = testmethod(() => default(int));
}

虽然 testmethod 的第一次调用没有错误,但第二次调用因 InvalidCastException 而崩溃(翻译):

System.Linq.Expressions.Expression`1[System.Func`1[System.In32]] cannot be converted to System.Func`1[System.In32] 

该消息表明表达式根本没有被编译,但为什么它在第一次就可以运行呢?我错过了什么?

最佳答案

e.Compile返回 Func<T>但你要添加来源 Expression<Func<T>>到您然后尝试转换为 Func<T> 的字典在第二次通话中。添加编译的Func<T>dict相反:

dict.Add(1, result);

关于c# - Expression<Func<..>>.Compile() 的实际类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48559760/

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