Ok, đây là một ý tưởng.
Bạn có thể khai báo hàm này.
IReadOnlyDictionary<string, T> InstantiateByName<T>(
Func<string, T> instantiator
params string[] names)
{
return names.Distinct().ToDictionary(
name => name,
name => instantiator(name))
}
mà bạn có thể gọi như thế này,
var entities = InstantiateByName(
GetByName,
"EntityName1",
"EntityName2",
"EntityName3");
Để đẩy quá kỹ thuật để cấp độ tiếp theo,
bạn có thể cài đặt các bộ sưu tập gói Immutable,
PM> Install-Package Microsoft.Bcl.Immutable
và sửa đổi chức năng hơi,
using Microsoft.Immutable.Collections;
IReadOnlyDictionary<string, T> InstantiateByName<T>(
Func<string, T> instantiator
params string[] names,
IEqualityComparer<string> keyComparer = null,
IEqualityComparer<T> valueComparer = null)
{
if (keyComparer == null)
{
keyComparer = EqualityComparer<string>.Default;
}
if (valueComparer == null)
{
valueComparer = EqualityComparer<T>.Default;
}
return names.ToImmutableDictionary(
name => name,
name => instantiator(name),
keyComparer,
valueComparer);
}
Chức năng sẽ được sử dụng theo cách giống hệt nhau. Tuy nhiên, người gọi có trách nhiệm truyền các khóa duy nhất cho hàm nhưng, một trình so sánh bình đẳng thay thế có thể được thông qua.
Ngoài thực tế là không có chủ đề để cung cấp mã làm việc, thật khó để cải thiện mã mà không cần thêm thông tin cơ bản. Có lẽ bạn có thể sử dụng một 'Dictionary'. –
Nó phụ thuộc vào cách bạn dự định sử dụng chúng, bạn có thể sử dụng một vòng lặp đơn giản nhưng không rõ ràng những gì bạn mong đợi làm với chúng sau đó – Sayse
er yeah, đó là những gì một vòng lặp cho. – Jodrell