.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
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));
我对 .Net Collections 不是很有经验。
这里有我想以某种方式重写的代码。
emptyOrganization.Name = "";
var organizations = new List<IOrganization>();
organizations.Add(emptyOrganization);
organizations.AddRange(_organizationRepository.GetAll(LanguageCurrent.Id));
model.Organizations = organizations;
可以用更少的行重写吗?
(我假设 emptyOrganization
是 IOrganization
并且 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));