2013-05-06 2 views
1

Я был бы признателен, если кто-то может сказать мне, что это лучший способ определения list и передавая строку к немуЧто лучше способ передачи строки в список в C# higlighting ListBox на основе базы данных значений

Я не уверен, который один использовать или какой из них лучше с точки зрения производительности

var selection = "28,2,10,30,100,51"; 
List<string> categories = selection.Split(',').ToList(); 
List<string> categories = new List<string>(selection.Split(',')); 

Я действительно хочу, чтобы выделить элементы ListBox на основе выбора базы данных

после создания моего списка я цикл через них & использовать следующий код, чтобы выделить выбор в множественного выбора списка коробки в asp.net

foreach (ListItem item in lstCatID.Items) 
{ 
    if (categories.Contains(item.Value)) 
     item.Selected = true; 
} 

ли лучший способ сделать это, или это может быть сделано любым другим способом, чтобы повысить производительность.

+2

Проблема с производительностью до тех пор, пока не возникнет проблема с производительностью. При этом я считаю, что это «чище», если «категории» - это набор. – user2246674

+0

У меня есть от четырех до пяти элементов управления списком и я не уверен, как это будет на самом деле, если оно мало. то это прекрасно, что я должен рассмотреть, если мне, возможно, придется сделать выбор из 500 - 600 статей в одном из списка и список, может расти день ото дня ... – Learning

+1

Почему даже .ToList() это? Массив из Split будет прекрасным. – CRice

ответ

2

Если вы используете его только для чтения, попробуйте использовать IEnumerable<string> вместо List<string>, который является более легким и ограничительным, чем список. Когда вы используете IEnumerable, вы даете компилятору возможность отложить работу дольше, возможно, оптимизируя на этом пути. SO при использовании Linq выражений вроде contains, которые вы используете здесь IEnumerable, вероятно, это лучший выбор. Помимо этого много раз во время шаблона desin, когда вы хотите перенести список предметов между двумя объектами снова IEnumerable - лучший выбор, поскольку он более ограничительный.

var selection = "28,2,10,30,100,51";   
IEnumerable<string> categories = selection.Split(','); 

foreach (ListItem item in lstCatID.Items) 
{ 
    if (categories.Contains(item.Value)) 
    item.Selected = true; 
} 
+0

Не будет поздней отсрочки, ее массив возвращен из Сплита. Можно также использовать var для объявления переменной, так как это будет IEnumerable (а также строка [], IList ) в любом случае. – CRice

3

ToList внутренне вызывает конструктор List с аргументом типа IEnumerable, поэтому для обоих ваших случаев это было бы так же.

Вы должны увидеть: Reimplementing LINQ to Objects: Part 20 - ToList (Jon Skeet)

Вы можете быть удивлены, почему мы даже должны ToList, если мы могли бы просто создать список путем вызова конструктора напрямую. Разница заключается в том, что в для вызова конструктора вам необходимо указать тип элемента как аргумент типа.

Было бы лучше для вас, если вы можете время их обоих с помощью Stopwtach, чтобы увидеть разницу, также сначала убедитесь, что ваш код работает, а затем беспокоиться о производительности. Обычно оптимизация производительности для такого рода задач приводит к незначительным улучшениям.

Смежные вопросы