哪个是基于数据库值在C#突出显示列表框中将字符串传递给List的更好方法

问题描述 投票:1回答:2

如果有人能告诉我什么是定义list并将字符串传递给它的更好方法,我将不胜感激

从性能的角度来看,我不确定使用哪一个或哪一个更好

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;
}

是最好的方法,或者可以通过任何其他方式来提高性能。

c# asp.net list
2个回答
2
投票

如果您只是使用它来读取值,请尝试使用IEnumerable<string>,如果List<string>比列表更轻和限制。当您使用IEnumerable时,您可以让编译器有机会将工作推迟到以后,可能会在此过程中进行优化。因此,在使用像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;
}

3
投票

ToList内部调用List构造函数采用IEnumerable类型的参数,因此对于你的两种情况它都是相同的。

你应该看看:Reimplementing LINQ to Objects: Part 20 - ToList (Jon Skeet)

您可能想知道为什么我们甚至需要ToList,如果我们可以通过直接调用构造函数来创建列表。不同之处在于,为了调用构造函数,您需要将元素类型指定为类型参数。

如果您可以使用Stopwtach来查看差异,那么对您来说会更好。首先确保您的代码有效,然后担心性能。通常,针对此类任务的性能优化会导致可忽略的改进。

© www.soinside.com 2019 - 2024. All rights reserved.