赋值不会使用 lambda 表达式修改 List ForEach 函数中的变量

发布于 2024-10-21 02:03:00 字数 571 浏览 1 评论 0原文

我正在为我的作业编写一个简单的加密。我已经完成了它,现在我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

故人的歌 2024-10-28 02:03:00

它确实使用了局部变量。如果您希望将 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.

森林迷了鹿 2024-10-28 02:03:00

如果您想要一个与问题更相关的解决方案,这将更合适

public static class Extensions
{
    public static void ModifyWhere<T>(this List<T> list, Func<T, bool> condition, Func<T, T> act)
    {
        for (int i = 0; i < list.Count; i++)
        {
            if (condition(list[i]))
                list[i] = act(list[i]);
        }
    }
}

,并且该解决方案不会具体,方法采用 bool 返回函数作为条件,并将返回函数作为操作。

以下是示例用法

mylist.ModifyWhere(someBoolReturningFunction, someTReturningFunction);

If you want a more problem related solution this will be more suitable

public static class Extensions
{
    public static void ModifyWhere<T>(this List<T> list, Func<T, bool> condition, Func<T, T> act)
    {
        for (int i = 0; i < list.Count; i++)
        {
            if (condition(list[i]))
                list[i] = act(list[i]);
        }
    }
}

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

mylist.ModifyWhere(someBoolReturningFunction, someTReturningFunction);
绝情姑娘 2024-10-28 02:03:00

是的,在您的代码中,变量“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.

我一向站在原地 2024-10-28 02:03:00

您可以编写自己的扩展方法来迭代列表,修改项目,然后根据 lambda 返回一个新列表,如下所示:

public static class Extensions
{
  public static List<T> ModifyEach<T>(this List<T> list, Func<T, T> method)
  {
    List<T> mod = new List<T>();

    foreach (T e in list)
    {
      mod.Add(method(e));
    }

    return mod;
  }
}

示例用法:

List<string> f = new List<string>()
{
  "hello",
  "world"
};

f = f.ModifyEach(x => x.ToUpper());
f.ForEach(x => Console.WriteLine(x));

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:

public static class Extensions
{
  public static List<T> ModifyEach<T>(this List<T> list, Func<T, T> method)
  {
    List<T> mod = new List<T>();

    foreach (T e in list)
    {
      mod.Add(method(e));
    }

    return mod;
  }
}

Sample usage:

List<string> f = new List<string>()
{
  "hello",
  "world"
};

f = f.ModifyEach(x => x.ToUpper());
f.ForEach(x => Console.WriteLine(x));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文