优点& LINQ和传统的基于集合的方法之间的缺点

时间:2008-09-07 13:33:25

标签: c# .net asp.net linq

相对较新的.net游戏,我想知道,有没有人对使用LINQ和使用列表/集合的传统方法之间的优缺点有任何经验?

对于我正在处理的项目的特定示例:正在从远程Web服务检索唯一ID /名称对的列表。

  • 此列表不经常更改(每天一次),
  • 从使用它的应用程序的角度来看是只读的
  • 将存储在应用程序级别,以便访问所有访问

鉴于这些要点,我计划将返回值存储在单个类中的应用程序级别。

我最初的方法是遍历从远程服务返回的列表,并将其存储在单例类中的NameValueCollection中,并使用基于id从集合中检索的方法:

sugarsoap soapService = new sugarsoap();
branch_summary[] branchList = soapService.getBranches();

foreach (branch_summary aBranch in branchList)
{
    branchNameList.Add(aBranch.id, aBranch.name);
}

使用LINQ的替代方法是简单地添加一个在检索后直接在列表上工作的方法:

public string branchName (string branchId) 
{
    //branchList populated in the constructor
    branch_summary bs = from b in branchList where b.id == branchId select b;
    return branch_summary.name;
}

要么比另一个更好 - 还有第三种方式吗?对于这两种方法,无论是提供优雅的解决方案还是有利于绩效的解决方案,我都会接受所有答案。

4 个答案:

答案 0 :(得分:3)

我不认为你写的linq会编译,它必须是

public string branchName (string branchId) 
{
    //branchList populated in the constructor
    branch_summary bs = (from b in branchList where b.id == branchId select b).FirstOrDefault();
    return branch_summary == null ? null : branch_summary.name;
}

注意.FirstsOrDefault()

我宁愿使用LINQ,因为它可以在其他地方使用,用于在数据上编写更复杂的过滤器。我还认为它比NameValueCollection替代方案更容易阅读。

那是我的0.02美元

答案 1 :(得分:1)

通常,简单的一行for / foreach循环比使用Linq快。此外,在这种情况下,Linq [始终]不会提供显着的可读性改进。以下是我编码的一般规则:

如果算法非常简单,无需Linq即可编写和维护,并且您不需要延迟评估, Linq不能提供足够的可维护性改进,那么请不要使用它。但是,有时Linq 非常提高了代码的可读性和正确性,如我发布的herehere两个示例所示。

答案 2 :(得分:0)

我不确定单身类是绝对必要的,你是否绝对需要全局访问?名单大吗?

我假设你会在单例类上有一个刷新方法,用于何时需要更改属性,还有一些方法可以在列表更改时通知单例更新。

这两种解决方案都是可行的。我认为LINQ将在构造函数中更快地填充集合(但不会明显更快)。传统的基于集合的方法很好。就个人而言,我会选择LINQ版本,因为它是新技术,我喜欢使用它。假设您的部署环境具有.NET 3.5 ...

您的网络服务上是否有通过ID获取分支的方法?如果不经常需要分支信息,这将是第三个选项。

答案 3 :(得分:0)

缩短并加工:

public string BranchName(string branchId) 
{
    var bs = branchList.FirstOrDefault(b => b.Id == branchId);

    return bs == null ? null : bs.Name;
}