Лучший способ сделать разделение и преобразовать результат в целые - PullRequest
1 голос
/ 22 мая 2009

У меня есть таблица БД, которая содержит разделенный запятыми список идентификаторов (целых), которые хранятся как nvarchar.

У меня есть метод get, который возвращает их одним попаданием в виде списка. На данный момент я думаю, что мне придется сделать что-то вроде этого:

List<int> ids = new List<int>();
string[] pageids = experssion.Split(separators)

foreach (string number in pageids)
{
    ids.Add(Convert.ToInt32(number));
}

Кто-нибудь может придумать более хороший способ сделать это? Можно ли как-то все это сделать на сплите?

Ответы [ 3 ]

11 голосов
/ 22 мая 2009

Я бы к этому так:

var ids = expression.Split(separator).Select(s => int.Parse(s));

Используются расширения Linq .NET 3.0. В качестве альтернативы (экономит одну лямбду), вы также можете сделать это, возможно, менее читабельно:

var ids = expression.Split(separator).Select((Func<string, int>)int.Parse);
3 голосов
/ 22 мая 2009

Если вы не используете C # 3.0 или не являетесь поклонником LINQ, вы можете сделать это C # 2.0:

// This gives you an int[]
int[] pageids = Array.ConvertAll(expression.Split(separator), new Converter<string,int>(StringToInt));

// Add each id to the list
ids.AddRange(pageids);

public static int StringToInt(string s)
{
 return int.Parse(s);
}

РЕДАКТИРОВАТЬ:

Или, что еще проще, согласно предложению Конрада:

int[] pageids = Array.ConvertAll<string,int>(expression.Split(separator),int.Parse);
ids.AddRange(pageids);
1 голос
/ 22 мая 2009

С LINQ вы можете сделать это:

List<int> ids 
  = expression
  .Split(separators)
  .Select(number => Convert.ToInt32(number))
  .ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...