1

我有一个这样的人名单:

foreach (GridViewRow r in gv_contactList.Rows)
                        {
                            Person p = new Person();
                            p.Id = int.Parse(gv_contactList.DataKeys[r.RowIndex].Value.ToString());
                            p.Name = r.Cells[1].Text.TrimEnd();
                            p.Mobile = r.Cells[2].Text.TrimEnd();
                            p.Email = r.Cells[3].Text.TrimEnd();
                            p.Pkind = 1;//ToDo
                            plst.Add(p);

                        }

string[] 如何在手机号码不为空或不为空的同一个循环中获取手机号码数组。而不是再次循环遍历人员列表以将手机号码放入数组中。

4

4 回答 4

2
var mobiles = new List<string>();

foreach (GridViewRow r in gv_contactList.Rows) 
{ 
    ...
    p.Mobile = r.Cells[2].Text.TrimEnd(); 
    if (!String.IsNullOrEmpty(p.Mobile)) {
        mobiles.Add(p.Mobile);
    }
    ... 
} 

var mobilesArray = mobiles.ToArray();
于 2012-10-01T11:49:53.277 回答
2

不太确定你想要什么。但是,如果您想要人员列表中的字符串电话号码数组,plst您可以执行以下操作:

string[] phoneArray = plist
                          .Where(r=>string.IsNullOrWhiteSpace(r.Mobile))
                          .Select(r=>r.Mobile.ToString())
                          .ToArray();
于 2012-10-01T11:50:28.070 回答
1

声明一个ArrayListbefore foreach

ArrayList<String> mobNums = new ArrayList<String>();

在里面foreach添加手机号 对它:

mobNums.Add(p.Mobile);

foreach将其更改为数组后:

String[] arr = mobNums.ToArray();
于 2012-10-01T11:52:08.153 回答
1

假设plst已经存在:

var plst = ...

var persons = from GridViewRow r in gv_contactList.Rows
              select new Person {
                Id = int.Parse(gv_contactList.DataKeys[r.RowIndex].Value.ToString()),
                Name = r.Cells[1].Text.TrimEnd(),
                Mobile = r.Cells[2].Text.TrimEnd(),
                Email = r.Cells[3].Text.TrimEnd(),
                Pkind = 1,
              };

var mobiles = persons.Aggregate(new List<string>(), (acc, cur) => 
              {
                plst.Add(cur);

                if (!string.IsNullOrEmpty(cur.Mobile))
                    acc.Add(cur.Mobile);
                return acc;
              }).ToArray();

枚举只发生一次。

于 2012-10-01T12:53:10.547 回答