赋值不会使用 lambda 表达式修改 List ForEach 函数中的变量
我正在为我的作业编写一个简单的加密。我已经完成了它,现在我正在尝试使用 lambda 表达式改进我的代码。列表中的对象在 lambda 表达式之后不会改变。它使用局部变量吗?我怎样才能用 lambda 表达式做到这一点。 后编写了代码,谢谢...
public override string Encrypt(string code)
{
List<Byte> encodedBytes = new List<Byte>(ASCIIEncoding.ASCII.GetBytes(code));
encodedBytes.ForEach(o => { if (hash.Contains(o))
o = hash.ElementAt((hash.IndexOf(o) + ShiftAmount) % hash.Count); });
return ASCIIEncoding.ASCII.GetString(encodedBytes.ToArray());
}
我在等待您的答复
I'm writing a simple encrypting for my homework. I have completed it, now i'm trying to improve my code with lambda expressions. Object in list doesn't change after lambda expression. Is it using a local variable ? And how can i do that with lambda expression. I wrote my code following
public override string Encrypt(string code)
{
List<Byte> encodedBytes = new List<Byte>(ASCIIEncoding.ASCII.GetBytes(code));
encodedBytes.ForEach(o => { if (hash.Contains(o))
o = hash.ElementAt((hash.IndexOf(o) + ShiftAmount) % hash.Count); });
return ASCIIEncoding.ASCII.GetString(encodedBytes.ToArray());
}
I'm waiting for your answer, thanks...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
它确实使用了局部变量。如果您希望将 lambda 的返回值重新分配到列表中,请使用 ConvertAll 而不是 ForEach。
It is indeed using a local variable. If you want the return value of the lambda to assign back into the list, use ConvertAll instead of ForEach.
如果您想要一个与问题更相关的解决方案,这将更合适
,并且该解决方案不会具体,方法采用 bool 返回函数作为条件,并将返回函数作为操作。
以下是示例用法
If you want a more problem related solution this will be more suitable
and this solution won't be specific, method taking a bool returning function as a condition, and returning function as an action.
a sample usage will be following
是的,在您的代码中,变量“o”是传递给 ForEach 方法的匿名方法范围内的局部变量。对其所做的更改不会反映在该范围之外。
Yes, in your code the variable 'o' is a local variable in the scope of the anonymous method passed to the ForEach method. Changes to it will not be reflected outside that scope.
您可以编写自己的扩展方法来迭代列表,修改项目,然后根据 lambda 返回一个新列表,如下所示:
示例用法:
You could write your own extension method to iterate over your list, modifying the items and then returning a new list based on your lambda like this:
Sample usage: