.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;

可以用更少的行重写吗?

(我假设 emptyOrganizationIOrganization 并且 GetAll returns 是 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));