var p = str.Split('@').Select(x => x.Split('=')).Where(x => x.Count() == 2).ToDictionary(x => x[0], x => x[1]);

解决方案 »

  1.   

    1.使用split方法依据“=”分割
    2.然后将奇数索引的字符串使用subString方法截取到字母
    3.将偶数索引的字符串转换成数字
    4.到这一步就获取到所需要的了,接下来可以使用二维数组等类似方法进行一一对应
      

  2.   

    楼主是PHP转过来的么,竟然把数组当字典用,按你的用法 ,应该是转成字典,而不是数组。string str = "@a=1@b=2@c=3";
     Dictionary<string, int> p =  str.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(i => i.Split('='))
                    .ToDictionary(i => i[0], i => int.Parse(i[1]));
      

  3.   

    string 本是 char[]
    有必要转?
      

  4.   

    不如用byte[]数组来存储。如果以后用于网络流、加密等操作。方便。
      

  5.   

    按楼主需求,应该是要资料字典
    string str = "@a=1@b=2@c=3";
     Dictionary<string, int> p = str.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(i => i.Split('='))
    .ToDictionary(i => i[0], i => int.Parse(i[1]));
     Console.WriteLine("p[\"a\"]=" + p["a"]);
    Console.WriteLine("p[\"b\"]=" + p["b"]);
    Console.WriteLine("p[\"c\"]=" + p["c"]);
     Console.ReadKey();
    运行结果:
      

  6.   

    1.运用linq和lambda:var p = str.Split('@').Select(x => x.Split('=')).Where(x => x.Count() == 2).ToDictionary(x => x[0], x => x[1]); 
    2.传统数组方法:split('@')得到的数组,再循环转字典。