Замена string.Split(string[]) на string.Split(char[])C#

Место общения программистов C#
Ответить
Anonymous
 Замена string.Split(string[]) на string.Split(char[])

Сообщение Anonymous »

Я заметил, что в нашем коде много вызовов string.Split(string[],StringSplitOptions), например:
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries)

или вот так:
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)

Моя интуиция подсказывает мне, что я могу заменить их все чем-то вроде этого, чтобы улучшить читабельность (и, возможно, повысить производительность, хотя меня это не так уж и волнует), и что не будет побочных эффектов:
static readonly string CrLfStrings = new char[] { '\r', '\n' };
input.Split(CrLfStrings, StringSplitOptions.RemoveEmptyEntries)

На самом деле, моя интуиция подсказывает мне, что для любого набора символов SC, если string.Split(string[],StringSplitOptions) вызывается с помощью RemoveEmptyEntries и набора строк, включающего все односимвольные строки SC, а все остальные строки состоят только из символов SC, Я мог бы заменить его вызовом string.Split(char[],StringSplitOptions) с помощью RemoveEmptyEntries и SC, и побочных эффектов не будет.Моя догадка верна? Можно ли это доказать? Если да, то я могу с радостью произвести замену везде, даже если я не понимаю окружающий код.
Другими словами, будет ли приведенный ниже метод Compare возвращать true для любой ненулевой строки? Меня не очень интересуют крайние случаи, когда у одного может не хватить памяти, а у другого нет.
using System;
using System.Linq;

private static bool Compare(string input)
{
string[] prev = null;
var funcs = new Func[] { Split0, Split1, Split2 };
for (int i = 0; i < funcs.Length; i++)
{
var curr = funcs(input);
if (i != 0 && !(curr.SequenceEqual(prev)))
{
return false;
}
prev = curr;
}
return true;
}

private static string[] Split0(string input) =>
input.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split1(string input) =>
input.Split(new string[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
private static string[] Split2(string input) =>
input.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);


Подробнее здесь: https://stackoverflow.com/questions/783 ... -splitchar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»