C#IEnumerable <string>和string []

时间:2015-06-23 10:05:56

标签: c# arrays string split ienumerable

我搜索了一个分割字符串的方法,我发现了一个 现在我的问题是我无法使用所描述的方法。

Stackoverflow answer

它会告诉我

  

无法隐式转换类型   'System.Collections.Generic.IEnumerable'到'string []'。

提供的方法是:

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]

3 个答案:

答案 0 :(得分:8)

您必须使用ToArray()方法:

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

您可以将Array隐式转换为IEnumerable,但不能将其反之亦然。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

如果最终以这种方式结束: IEnumerable<string> things = new[] { "bob", "joe", "cat" }; 您可以将其转换为string[],如下所示: string[] myStringArray = things.Select(it => it).ToArray();