可以说我有一个数组如何在阵列内联样式值添加到每个项目
string[] arr = new string[] {"1","2","3"};
我想一个字符串添加到的值结束,这样的事情:
arr.appendToEnd(" Test");
return arr; // returns {"1 Test","2 Test","3 Test"}
我想知道是否有内置的东西可以做到这一点,而不必构建自己的扩展方法。
可以说我有一个数组如何在阵列内联样式值添加到每个项目
string[] arr = new string[] {"1","2","3"};
我想一个字符串添加到的值结束,这样的事情:
arr.appendToEnd(" Test");
return arr; // returns {"1 Test","2 Test","3 Test"}
我想知道是否有内置的东西可以做到这一点,而不必构建自己的扩展方法。
没有任何内置。你可以使用LINQ轻松创建一个新的阵列:
arr = arr.Select(x => x + " Test").ToArray();
...但是这不会修改原始数组。如果其他任何东西都有对原始数组的引用,他们将不会看到更改。通常这实际上是IMO的一件好事,但偶尔你可能想修改现有的集合。
对于这一点,你可以编写自己的通用方法来修改现有的阵列(或任何其他IList<T>
执行):
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]);
}
}
那么你可以使用:
arr.ModifyAll(x => x + " Test");
我肯定会使用它而不是写一个字符串连接特定的扩展方法。
嘿,谢谢。在使用'.ToArray()'之前,'arr'是什么? (好奇) – RealWorldCoder 2014-10-08 18:01:44
@RealWorld:我不确定你的意思。 'arr.Select(x => x +“Test”)'返回一个懒惰评估的迭代器,当被问到时它将产生投影的结果。它根本不修改'arr'。 – 2014-10-08 18:02:46
如果通过“内置”您的意思是功能appendToEnd
存在,那么没有。
然而,它很容易做到:
arr = arr.Select(s => s + " Test").ToArray();
这不会修改数组。 – 2014-10-08 17:57:24
@JonSkeet更正,现在修复。 – BradleyDotNET 2014-10-08 17:57:53
这仍然不会做OP所要求的,即修改原始数组。差异可能很重要。我在回答中提供了一个示例。 – 2014-10-08 17:59:43
只是遍历数组并添加到每个元素的空间和测试。我不认为有内置的方法。 – 2014-10-08 17:57:27
http://stackoverflow.com/questions/3867961/c-altering-values-for-every-item-in-an-array你可以修改这个以适合你的需要 – 2014-10-08 17:58:26