如何将此手动代码转换为使用 Enumerable.Range 来初始化我的多维 属性?
How to I convert this manual code into using Enumerable.Range to initialize my multi-dimensional property?
此问题与此处答案中的代码示例相关 ()。
我现在有了这个构造函数:
public List<MSAHistoryItemStudent>[] StudentItems { get; set; }
public MSAHistoryWeek()
{
TalkItems = Enumerable.Range(1, 6).Select(x => new MSAHistoryItemTalk()).ToList();
Teaching = Enumerable.Range(1, 3).Select(x => string.Empty).ToList();
StudentItemStudyNumbers = Enumerable.Range(1, 5).Select(x => string.Empty).ToList();
StudentItemDescriptions = Enumerable.Range(1, 5).Select(x => string.Empty).ToList();
StudentItems = new List<MSAHistoryItemStudent>[]
{
new List<MSAHistoryItemStudent>(),
new List<MSAHistoryItemStudent>(),
new List<MSAHistoryItemStudent>(),
};
foreach(var studentitems in StudentItems)
{
for(int i = 0; i < 5; i++)
{
studentitems.Add(new MSAHistoryItemStudent());
}
}
}
我无法想出 Enumerable.Range
方法来预创建 StudentItems
我想要的方式:
- 我想要 3 个数组
List<MSAHistoryItemStudent>
。
- 我希望每个数组都有 5 个
MSAHistoryItemStudent
个元素。
只需在 Select
调用中嵌套另一个 Enumerable.Range(...)...
调用。
StudentItems =
Enumerable.Range(1, 3).Select(x =>
Enumerable.Range(1, 5).Select(y =>
new MSAHistoryItemStudent()
).ToList()
).ToArray();
由于列表数量相对较少,您可以将对 new
的调用替换为对 Enumerable.Range
:
的调用
StudentItems = new
{
Enumerable.Range(1, 5).Select(x => new MSAHistoryItemStudent()).ToList(),
Enumerable.Range(1, 5).Select(x => new MSAHistoryItemStudent()).ToList(),
Enumerable.Range(1, 5).Select(x => new MSAHistoryItemStudent()).ToList(),
};
顺便说一句,如果你把它放在某个地方:
public static List<T> MakeN<T>(int n) where T:new()
=> Enumerable.Range(1,n).Select(x => new T()).ToList();
然后你可以简化这些调用:
TalkItems = MakeN<MSAHistoryItemTalk>(6);
Teaching = new string[3].ToList();
StudentItems = new
{
MakeN<MSAHistoryItemStudent>(5),
MakeN<MSAHistoryItemStudent>(5),
MakeN<MSAHistoryItemStudent>(5),
};
以及您在其他任何地方使用 Enumerable.Range.Select.
。
...除了你在哪里做 string
(我已经给出了另一种形式)。
此问题与此处答案中的代码示例相关 (
我现在有了这个构造函数:
public List<MSAHistoryItemStudent>[] StudentItems { get; set; }
public MSAHistoryWeek()
{
TalkItems = Enumerable.Range(1, 6).Select(x => new MSAHistoryItemTalk()).ToList();
Teaching = Enumerable.Range(1, 3).Select(x => string.Empty).ToList();
StudentItemStudyNumbers = Enumerable.Range(1, 5).Select(x => string.Empty).ToList();
StudentItemDescriptions = Enumerable.Range(1, 5).Select(x => string.Empty).ToList();
StudentItems = new List<MSAHistoryItemStudent>[]
{
new List<MSAHistoryItemStudent>(),
new List<MSAHistoryItemStudent>(),
new List<MSAHistoryItemStudent>(),
};
foreach(var studentitems in StudentItems)
{
for(int i = 0; i < 5; i++)
{
studentitems.Add(new MSAHistoryItemStudent());
}
}
}
我无法想出 Enumerable.Range
方法来预创建 StudentItems
我想要的方式:
- 我想要 3 个数组
List<MSAHistoryItemStudent>
。 - 我希望每个数组都有 5 个
MSAHistoryItemStudent
个元素。
只需在 Select
调用中嵌套另一个 Enumerable.Range(...)...
调用。
StudentItems =
Enumerable.Range(1, 3).Select(x =>
Enumerable.Range(1, 5).Select(y =>
new MSAHistoryItemStudent()
).ToList()
).ToArray();
由于列表数量相对较少,您可以将对 new
的调用替换为对 Enumerable.Range
:
StudentItems = new
{
Enumerable.Range(1, 5).Select(x => new MSAHistoryItemStudent()).ToList(),
Enumerable.Range(1, 5).Select(x => new MSAHistoryItemStudent()).ToList(),
Enumerable.Range(1, 5).Select(x => new MSAHistoryItemStudent()).ToList(),
};
顺便说一句,如果你把它放在某个地方:
public static List<T> MakeN<T>(int n) where T:new()
=> Enumerable.Range(1,n).Select(x => new T()).ToList();
然后你可以简化这些调用:
TalkItems = MakeN<MSAHistoryItemTalk>(6);
Teaching = new string[3].ToList();
StudentItems = new
{
MakeN<MSAHistoryItemStudent>(5),
MakeN<MSAHistoryItemStudent>(5),
MakeN<MSAHistoryItemStudent>(5),
};
以及您在其他任何地方使用 Enumerable.Range.Select.
。
...除了你在哪里做 string
(我已经给出了另一种形式)。