4

作为 .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

4 回答 4

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 美元

于 2008-09-07T16:07:10.333 回答
1

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

如果算法很简单,可以在没有 Linq 的情况下编写和维护,并且您不需要延迟评估,并且Linq 没有提供足够的可维护性改进,那么不要使用它。但是,有时 Linq极大地提高了代码的可读性和正确性,如我在此处此处发布的两个示例所示。

于 2009-07-15T09:31:21.943 回答
0

我不确定单例课程是否绝对必要,您是否始终需要全局访问?列表很大吗?

我假设当属性需要更改时,您将在单例类上有一个刷新方法,并且您还有一些方法可以在列表更改时通知单例进行更新。

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

您的 Web 服务是否有通过 Id 获取分支的方法?如果不经常需要分支信息,那将是第三种选择。

于 2008-09-07T14:32:02.263 回答
0

缩短和工作:

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

    return bs == null ? null : bs.Name;
}
于 2012-09-29T11:29:19.000 回答