gpt4 book ai didi

c# - LINQ 导致我的混淆器崩溃

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

我有以下 LINQ 导致我的混淆器中断。

.Where(f => f.FileName == fileName).OrderByDescending(f => f.Position).FirstOrDefault();

是否有另一种方法可以改写此 LINQ 语句以针对我的混淆器进行测试?

我已经报告了这个错误,但它可能需要 1-2 个月才能修复,所以我需要在此期间尝试重新编写此 LINQ。

更新:

LINQ 中的确切原因是:

.Where(f => f.FileName == fileName)

最佳答案

问题究竟是如何表现出来的?由于 C# 表达式编译器(在上面的 LINQ 中使用)使用 memberinfo 标记直接(而不是依赖字符串作为反射),我看不出您可以做得更好。同样,假设它是一个 IL 混淆器(不是源混淆器),将其重写为查询表达式应该不会有任何效果,nix、zip、zero 和 nada。你可以试试...

var first = (from f in [whatever]
where f.FileName == fileName
orderby f.Position descending
select f).FirstOrDefault();

到底发生了什么?


根据评论进行编辑:如果问题是“捕获”,您可以尝试使用常量(而不是捕获的值)手动构建表达式 - 其中 Foo 是您的类型:

    var param = Expression.Parameter(typeof(Foo), "f");
var body = Expression.Equal(Expression.PropertyOrField(param, "FileName"),
Expression.Constant(filename));
var predicate = Expression.Lambda<Func<Foo, bool>>(body, param);

然后使用:

    .Where(predicate).OrderByDescending(f => f.Position).FirstOrDefault();

当然,问题在于说服它“FileName”和 Foo.FileName 必须保持不变......


这是一个不需要字符串的版本:

    Expression<Func<Foo, string>> liftFileName = foo => foo.FileName;
var predicate = Expression.Lambda<Func<Foo, bool>>(
Expression.Equal(liftFileName.Body, Expression.Constant(filename)),
liftFileName.Parameters);

关于c# - LINQ 导致我的混淆器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2737048/

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