簡體   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