2016-11-23 1 views
-3

Мне любопытно, почему .NET string.Empty.Split() возвращает один элемент, содержащий пробельный символ?Почему .NET string.Empty.Split() возвращает один элемент, содержащий пробельный символ?

+0

может быть подобный вопрос http://stackoverflow.com/questions/2906621/undocumented- overload-of-string-split – Vladimir

+3

** Это не так. ** Он возвращает массив, содержащий 1 пустую строку. В этом первом элементе нет символа пробела. Можете ли вы рассказать нам, почему вы думаете, что есть? Какой инструмент/код вы используете для показа содержимого этого первого элемента, который говорит вам, что там есть место? –

+0

Вы можете избавиться от этого пространства, если вы передадите эту опцию 'StringSplitOptions.RemoveEmptyEntries' – Sherlock

ответ

0

string.Empty.Split() возвращает массив строк, который имеет значение string.Empty в первой позиции. Что бы вы ожидали?

Дополнительная информация: Все, что до первого матча возвращается как первый элемент. Если совпадения нет, сама строка возвращается в первой позиции.

+0

ОК, комбинация split и join меня смутила: ' '' var strings = string.Empty.Split(); '' ' '' 'var list = new Список (строки) {" another "};' '' '' 'Console.WriteLine ($" '{string.Join ("", list)}' ");' ' ' Это добавляет одно пространство. Но откуда оно взялось? –

+0

Ах, если бы я понял, что делает раскол, я бы не удивился, если бы получил место в начале моей объединенной строки. –

+0

Итак, на ваш вопрос ответили? –

1

Небольшая коррекция в вашем заявлении. string.Empty.Split() не возвращает один элемент с символом пробела, но возвращает элемент с пустой строкой. Это связано с тем, что метод split(), когда он не имеет аргументов, рассматривает пробел как разделитель. Но нет никакого пробела в string.Empty. Поэтому он просто возвращает string.Empty как таковой в первом элементе выходного массива.

0

Когда вы ничего не предоставили в качестве сепаратора обеспечивают к методу Split, он uses whitespaces by default:

private unsafe int MakeSeparatorList(char[] separator, ref int[] sepList) { 
    ... 
    if (separator == null || separator.Length ==0) { 
     ... 
     // If they passed null or an empty string, look for whitespace. 

Так что, когда вы звоните string.Empty.Split(), вы пытаетесь разбить строку на пуста пробельных символов. Их нет, поэтому метод возвращает всю строку в качестве единственного результата. Точно как вызов "Hello!".Split возвратит string[] { "Hello!" }

0

Это не see

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine("ehh \"" + string.Empty.Split()[0] + "\""); 
    } 
} 

возвращается:

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