2014-11-11 1 views
-2

Я занимаюсь разработкой библиотеки .NET Framework.Удалить символ во всех строках в строковом массиве

Если у меня есть этот массив string[] elements. И я хочу удалить этот символ \" во всех них, как я могу это сделать в одной инструкции?

Я знаю, что я могу это сделать:

foreach(string element in elements) 
    element = element.Replace("\"", string.Empty); 

Есть ли способ сделать это в одном предложении? (без использования foreach).

+1

Если вам разрешено изменять ссылку 'elements', вы можете сделать это с помощью LINQ. В противном случае вы можете создать метод расширения ForEach, который работает с массивами. – Groo

+0

Но '' \ "" 'это то же самое, что' '' '' '' '' ', так как это последовательность escapse. –

+0

Вы не можете делать _anything_ с' n'-элементами без их петли. –

ответ

6

Вы можете создать новый массив с новыми значениями:

var newValues = elements.Select(x => x.Replace("\"", string.Empty)).ToArray(); 

При создании нового массива будет проблемой, вы должны придерживаться подхода цикла.

Кроме того, вы не можете изменить переменную в foreach петлю как that.You должны получить ошибку компиляции:

Cannot assign to 'element' because it is a 'foreach iteration variable'

Вам понадобится for цикл:

for(int i = 0; i < elements.Length; i++) 
    elements[i] = elements[i].Replace("\"", string.Empty); 
+2

Это также (менее эффективный) цикл. –

+1

Совершенно верно, но вы его не видите. LinQ часто является сахарным покрытием ...: D – Abbas

+2

@Abbas: но в этом случае это отравленный сахар. –

2

Прежде всего, ваш код не будет работать, поскольку он просто создает новые экземпляры string. Вы не будете обновлять свой массив новыми значениями.

Вы можете использовать LINQ-х Select, чтобы получить то, что вы хотите:

elements = elements.Select(x => x.Replace("\"", string.Empty)).ToArray(); 

Этот код создает новый массив с измененными значениями из elements. Обратите внимание, что этот код менее эффективен, чем обычный цикл for, который я бы рекомендовал в этом случае.

+1

Является также циклом и даже менее эффективным, чем код OP. –

+3

Правда, отметили влияние производительности в моем ответе. Вы заметили, что ОП попросил однострочный, а не самый эффективный код? –

1

В одной строке, конечно, легко, просто удалить эту строку и отступы:

foreach(string element in elements) element = element.Replace(@"\"", string.Empty); 

без использования цикла Еогеасп? Конечно, использовать для вместо:

for (int i = 0; i < elements.Length; i++) elements[i] = elements[i].Replace(@"\"", string.Empty); 

Вы, возможно, уже заметили, что @ я вставил туда. Очень важно, в принципе игнорирует escape-последовательности, поэтому на самом деле он избавляется от \", а не только "

+0

'foreach' не компилируется. –

+1

@TimSchmelter Нет, и не будет. Никогда не. Тем не менее. И я уверен, что искатель знает, что foreach не будет компилироваться, поэтому он попросил способ сделать это без foreach. – Shadow

+0

'@' не требуется, потому что Vans только хочет удалить обратную косую черту, а '@' символ в этом случае не поможет. ;) Как бы то ни было, удаление нового символа линии похоже на * обман * и, вероятно, не то, что нужно обману. : P – Andrew

Смежные вопросы