繁体   English   中英

.net集合优化

[英].net collections optimization

我对.Net Collections没有真正的经验。

在这里,我有想要重写的代码。

emptyOrganization.Name = "";
var organizations = new List<IOrganization>();
organizations.Add(emptyOrganization);
organizations.AddRange(_organizationRepository.GetAll(LanguageCurrent.Id));
model.Organizations = organizations;

可以用更少的行重写吗?

(我假设emptyOrganization是一个IOrganization ,并且GetAll返回IEnumerable<IOrganization>或类似的东西。)

您的代码已经很有效,但是您可能想尝试使其更清晰。 您可以使用:

model.Organizations = new[] { emptyOrganization }
    .Concat(_organizationRepository.GetAll(LanguageCurrent.Id))
    .ToList();

如果您经常发现自己想要一个集合,该集合是一个值,然后是另一个集合的值,则可以始终为此编写扩展方法:

public static IEnumerable<T> Prepend(this IEnumerable<T> source, T value)
{
    yield return value;
    foreach (var item in source)
    {
        yield return item;
    }
}

然后您将拥有:

model.Organizations = _organizationRepository.GetAll(LanguageCurrent.Id)
   .Prepend(emptyOrganization)
   .ToList();

...这可能是最具表现力的形式。 Prepend也是一部分MoreLINQ ,所以你实际上并不需要自己编写...)

如果您真的想使用一个衬板,可以使用LINQ:

model.Organizations = new IOrganization[]{ emptyOrganization }
.Concat(_organizationRepository.GetAll(LanguageCurrent.Id))
.ToList();

但是,为什么要那样? 您的代码可读且高效。

在不使用Linq的情况下,可以通过使用空组织初始化集合来节省一行:

var organizations = new List<IOrganization> {emptyOrganization};
organizations.AddRange(_organizationRepository.GetAll(LanguageCurrent.Id));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM