C# 如何在数组内联样式中为每个项添加值

C# 如何在数组内联样式中为每个项添加值,c#,C#,假设我有一个数组 string[] arr = new string[] {"1","2","3"}; 我想在值的末尾添加一个字符串,如下所示: arr.appendToEnd(" Test"); return arr; // returns {"1 Test","2 Test","3 Test"} 我想知道是否有内置的东西可以做到这一点,而不必构建自己的扩展方法。如果内置的意思是函数appendToEnd存在,那么就没有了 但是,这很容易做到: arr = arr.Select(s =&

假设我有一个数组

string[] arr = new string[] {"1","2","3"};
我想在值的末尾添加一个字符串,如下所示:

arr.appendToEnd(" Test");

return arr; // returns {"1 Test","2 Test","3 Test"}

我想知道是否有内置的东西可以做到这一点,而不必构建自己的扩展方法。

如果内置的意思是函数appendToEnd存在,那么就没有了

但是,这很容易做到:

arr = arr.Select(s => s + " Test").ToArray();

如果“内置”是指函数appendToEnd存在,则不存在

但是,这很容易做到:

arr = arr.Select(s => s + " Test").ToArray();

没有任何内置的东西。您可以使用LINQ轻松创建新阵列:

arr = arr.Select(x => x + " Test").ToArray();
。。。但这不会修改原始数组。如果其他任何内容引用了原始数组,它们将看不到更改。在我看来,这通常是一件好事,但有时您可能需要修改现有集合

为此,您可以编写自己的通用方法来修改现有阵列或任何其他IList实现:

public static void ModifyAll<T>(this IList<T> source, Func<T, T> modification)
{
    // TODO: Argument validation
    for (int i = 0; i < source.Count; i++)
    {
        source[i] = modification(source[i]);
    }
}

我肯定会使用这个方法,而不是编写特定于字符串连接的扩展方法。

没有任何内置方法。您可以使用LINQ轻松创建新阵列:

arr = arr.Select(x => x + " Test").ToArray();
。。。但这不会修改原始数组。如果其他任何内容引用了原始数组,它们将看不到更改。在我看来,这通常是一件好事,但有时您可能需要修改现有集合

为此,您可以编写自己的通用方法来修改现有阵列或任何其他IList实现:

public static void ModifyAll<T>(this IList<T> source, Func<T, T> modification)
{
    // TODO: Argument validation
    for (int i = 0; i < source.Count; i++)
    {
        source[i] = modification(source[i]);
    }
}

我肯定会使用此方法,而不是编写特定于字符串连接的扩展方法。

这不会修改数组。@JonSkeet Correct,现已修复。这仍然不能满足OP的要求,即修改原始数组。差异可能很重要。我在回答中提供了一个示例。@JonSkeet毫无疑问,它将创建一个新的数组,这肯定很重要+1你的答案要完整得多;我假设OP需要一个单行程序,这就是为什么我没有建议使用循环。这不会修改数组。@JonSkeet更正,现已修复。这仍然不能满足OP的要求,即修改原始数组。差异可能很重要。我在回答中提供了一个示例。@JonSkeet毫无疑问,它将创建一个新的数组,这肯定很重要+1你的答案要完整得多;我假设OP需要一个单行程序,这就是为什么我没有建议使用循环。只需循环数组并向每个元素添加一个空格和测试。我不认为有一个内置的方法。您可能会修改它以满足您的需要,只需在数组中循环并向每个元素添加一个空格和test。我不认为有一个内置的方法。你可以根据自己的需要修改一下,谢谢。在使用前,arr是什么?ToArray?curious@RealWorld例如我不知道你的意思。arr.Selectx=>x+测试返回一个延迟计算的迭代器,当被询问时,该迭代器将生成投影结果。它根本不会修改arr。嘿,谢谢。在使用前,arr是什么?ToArray?curious@RealWorld例如我不知道你的意思。arr.Selectx=>x+测试返回一个延迟计算的迭代器,当被询问时,该迭代器将生成投影结果。它根本不修改arr。