Замена 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как разрешить 'std :: __ cxx11 :: basic_ostringstream <char, std :: char_traits <char>, std :: allocator <char>> :: basi
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Неопределенная ссылка на `std::basic_streambuf<char, std::char_traits<char> >::seekpos(std::fpos<int>, std::_Ios_Openmod
    Гость » » в форуме C++
    0 Ответы
    267 Просмотры
    Последнее сообщение Гость
  • Const char* против const char[]
    Anonymous » » в форуме C++
    0 Ответы
    160 Просмотры
    Последнее сообщение Anonymous
  • Преобразуя const char в широкий char, я получаю тарабарщину
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Почему MSVC не оптимизирует cout для char или const char*, но оптимизирует для int?
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

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