日期:2014-05-18  浏览次数:20798 次

发帖求解: 如何从一个Colletion 类型的转换为 string[] 数组类型? 内详.
C# code
            string ss = "a1a2a3a4a5a6a7a8a9";
            MatchCollection mc = Regex.Matches(ss, @"a\d");
            for (int i = 0; i < mc.Count; i++)
            {
                Console.WriteLine(mc[i].Value);
            }

通过代码取得了mc中一系列的匹配值.我想把这些值放到一个数组 string[] r 中.
有没有一句话的方式?

我现在只会写:
C# code
            string[] r = new string[mc.Count];
            for (int i = 0; i < mc.Count; i++)
            {
                r[i] = mc[i].Value;
            }


能不能写成 string[] r= XXXXXX ;//直接将Colletion 类型的转换为 string[] 数组类型
我试了试 Array.ConvertAll<(Of <(TInput, TOutput>)>) 泛型方法 一直没能成功!

------解决方案--------------------

C# code
        private string[] SplitStringArray()
        {
            System.Collections.ArrayList list = new System.Collections.ArrayList();
            string ss = "a1a2a3a4a5a6a7a8a9";
            System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(ss, @"a\d");
            for (int i = 0; i < mc.Count; i++)
            {
                list.Add(mc[i].Value.ToString());
                Console.WriteLine(mc[i].Value);
            }

            return (String[])list.ToArray(typeof(string));
        }

------解决方案--------------------
没必要吧。。。

MatchCollection 的内容远远不止一个string[],做这种只能说华而不实,一定要做,自己写个方法,处理一下,单纯取$0的内容存到一个数组里,使用时调用这个方法也就是了

当然,对于一些简单的,可以用Regex.Split来做
C# code
string ss = "a1a2a3a4a5a6a7a8a9";
string[] result = Regex.Split(ss, @"(?<=a\d+)(?=a\d+)", RegexOptions.IgnoreCase);