1

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

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

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

我实际上想根据数据库选择突出显示列表框项目

创建我的列表后,我遍历它们并使用以下代码突出显示 asp.net 中的多选列表框中的选择

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

是最好的方法还是可以以任何其他方式来提高性能。

4

2 回答 2

3

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

您应该看到:重新实现 LINQ to Objects:第 20 部分 - ToList (Jon Skeet)

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

如果您可以使用Stopwtach对它们进行计时以查看差异,那对您来说会更好,并且首先确保您的代码有效,然后再担心性能。通常这种任务的性能优化导致的改进可以忽略不计。

于 2013-05-06T05:16:06.903 回答
2

如果您只是使用它来读取值,请尝试使用IEnumerable<string>if List<string>which 比 list 更轻且更具限制性。当您使用 IEnumerable 时,您可以让编译器有机会将工作推迟到以后,可能会在此过程中进行优化。所以在使用像你在这里使用的Linq表达式时可能是最好的选择。除了在设计模式中多次要在 2 个对象之间传输项目列表时,IEnumerable 是最好的选择,因为它更具限制性。containsIEnumerable

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;
}
于 2013-05-06T05:17:10.930 回答