2015-06-23 7 views
2

Я искал метод разделения строк и нашел его.
Теперь моя проблема в том, что я не могу использовать метод, как описано.C# IEnumerable <string> и строка []

Stackoverflow answer

Он собирается сказать, что я

не может неявно преобразовать тип 'System.Collections.Generic.IEnumerable' в 'строку []'.

Предоставленный метод:

public static class EnumerableEx 
{ 
    public static IEnumerable<string> SplitBy(this string str, int chunkLength) 
    { 
     if (String.IsNullOrEmpty(str)) throw new ArgumentException(); 
     if (chunkLength < 1) throw new ArgumentException(); 

     for (int i = 0; i < str.Length; i += chunkLength) 
     { 
      if (chunkLength + i > str.Length) 
       chunkLength = str.Length - i; 

      yield return str.Substring(i, chunkLength); 
     } 
    } 
} 

Как он сказал, что это используется:

string[] result = "bobjoecat".SplitBy(3); // [bob, joe, cat] 
+0

массивы не реализуют IEnumerable

+2

@AmitKumarGhosh Вы можете назначить 'строку []' на '' IEnumerable Проблемы противоположно: вы не можете назначить 'IEnumerable ' 'string []' –

+1

@AmitKumarGhosh, [Arrays do реализуют IEnumerable ] (https://ideone.com/d8rBt6), так как .NET Framework 2.0, но только в [время выполнения] (https://msdn.microsoft.com/en-us/library/system.array.aspx#remarksToggle). Однако, как упоминалось Dennis_E, это не корень проблемы. – soon

ответ

8

Вы должны использовать ToArray() метод:

string[] result = "bobjoecat".SplitBy(3).ToArray(); // [bob, joe, cat] 

Вы можете неявно преобразовать Array - IEnumerable, но не может этого сделать наоборот.

+0

Я пробовал сейчас более 2 часов и никогда не думал, что это так просто. Большое спасибо! – Chakratos

+0

@ Chakratos - рад, что это помогло! – Kamo

1

Обратите внимание, что вы можете даже изменить непосредственно метод возвращать string[]:

public static class EnumerableEx 
{ 
    public static string[] SplitByToArray(this string str, int chunkLength) 
    { 
     if (String.IsNullOrEmpty(str)) throw new ArgumentException(); 
     if (chunkLength < 1) throw new ArgumentException(); 

     var arr = new string[(str.Length + chunkLength - 1)/chunkLength]; 

     for (int i = 0, j = 0; i < str.Length; i += chunkLength, j++) 
     { 
      if (chunkLength + i > str.Length) 
       chunkLength = str.Length - i; 

      arr[j] = str.Substring(i, chunkLength); 
     } 

     return arr; 
    } 
} 
Смежные вопросы