gpt4 book ai didi

c# - 我找不到内联表达式变量的代码

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

C# 编译器对此进行转换(例如):

Expression<Action> e = () =>Console.WriteLine();

进入:

Expression<Action> expression = 
Expression.Lambda<Action>(
Expression.Call(null,
(MethodInfo) methodof(Console.WriteLine),
new Expression[0]),
new ParameterExpression[0]);

我找不到对 System.Linq.Expression<T> 的任何引用在 the source code .

我的想法是让 C# 支持多语句 lambda 可能很简单。我只找到了设计时代码分析可以解决 lambda block 错误的地方。

有什么想法吗?

最佳答案

您正在寻找错误的东西。请记住,编译器不一定针对与它们自己使用的运行时版本相同的版本。如果它有意义(它没有),甚至可以将 Roslyn 编写为完全非托管的 C++,但仍会生成可验证的 .NET 可执行文件。因此,如果 Roslyn 实际使用 System.Linq.Expressions.Expression<T>直接输入,它只会在内部使用,它不会被复制到任何输出程序集中。相反,它所做的是按名称查找所需的运行时类型。

在这里搜索的一个好东西,因为你已经看到它被使用了,你可以猜到它不会给出很多误报,是 ParameterExpression ,其中只有两个文件的结果是 C# 编译器的一部分:Src/Compilers/CSharp/Source/Lowering/LambdaRewriter/ExpressionLambdaRewriter.csSrc/Compilers/Core/Source/WellKnownTypes.cs .前者是你想要的。

关于c# - 我找不到内联表达式变量的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721839/

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