2016-07-04 2 views
0

Кто-нибудь знает, существует ли верхний предел количества возвращаемых записей при обработке String.Split? У меня есть строка с «1,1,1,1,1,1,1,1,1 ...» с 600 записями, но она возвращает только 201 записей в возвращаемом массиве. Благодаря!Верхний предел возврата строки?

EDIT: Это всего лишь одна строка кода. Я открыл наблюдателя во время выполнения, чтобы убедиться, что в строке все еще есть 600 запятых/записей.

string[] splitLine = s.Split(','); 

И полученный массив splitLine содержит только 201 элемент.

EDIT 2: Nevermind, я идиот и не могу рассчитывать, не понял, что строка имеет 601 символ, который включает запятые и пробелы. Всем спасибо!

+0

Я просто обрабатывается 2245 записей без проблем. Можете ли вы показать код? Я предполагаю, что это что-то есть. – kemiller2002

+2

Пожалуйста, разместите проблему с кодом, не просто угадайте, в чем проблема, и попросите подтверждения без каких-либо подробностей. – Blorgbeard

ответ

3

Как вы можете видеть int исходный код метода String.Split, нет ограничений для разделить строки.

 [ComVisible(false)] 
     internal String[] SplitInternal(char[] separator, int count, StringSplitOptions options) 
     { 
     if (count < 0) 
      throw new ArgumentOutOfRangeException("count", 
       Environment.GetResourceString("ArgumentOutOfRange_NegativeCount")); 

     if (options < StringSplitOptions.None || options > StringSplitOptions.RemoveEmptyEntries) 
      throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", options)); 
     Contract.Ensures(Contract.Result<String[]>() != null); 
     Contract.EndContractBlock(); 

     bool omitEmptyEntries = (options == StringSplitOptions.RemoveEmptyEntries); 

     if ((count == 0) || (omitEmptyEntries && this.Length == 0)) 
     {   
      return new String[0]; 
     } 

     int[] sepList = new int[Length];    
     int numReplaces = MakeSeparatorList(separator, ref sepList);    

     //Handle the special case of no replaces and special count. 
     if (0 == numReplaces || count == 1) { 
      String[] stringArray = new String[1]; 
      stringArray[0] = this; 
      return stringArray; 
     }    

     if(omitEmptyEntries) 
     { 
      return InternalSplitOmitEmptyEntries(sepList, null, numReplaces, count); 
     } 
     else 
     { 
      return InternalSplitKeepEmptyEntries(sepList, null, numReplaces, count); 
     }    
    } 

Ссылка:http://referencesource.microsoft.com/#mscorlib/system/string.cs,baabf9ec3768812a,references

1

Как вы можете видеть здесь, метод возвращает сплит 600 частей.

using System; 
using System.Text; 

public class Program 
{ 
    public static void Main() 
    { 
     var baseString = "1,"; 
     var builder = new StringBuilder(); 

     for(var i=0;i<599;i++) 
     { 
      builder.Append(baseString); 
     } 
     builder.Append("1"); 

     var result = builder.ToString().Split(','); 

     Console.WriteLine("Number of parts:{0}",result.Length); 
    } 
} 

https://dotnetfiddle.net/oDosIp

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