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

其中一个比另一个更好 - 还有第三种方法吗?我对所有答案持开放态度,无论是在提供优雅的解决方案还是有利于性能的解决方案方面。

有帮助吗?

解决方案

我不认为你写的 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 美元

其他提示

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

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

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

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

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

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

缩短并工作化:

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

    return bs == null ? null : bs.Name;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top