拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何将此手动代码转换为使用Enumerable.Range来初始化我的多维属性?

如何将此手动代码转换为使用Enumerable.Range来初始化我的多维属性?

白鹭 - 2022-02-17 2124 0 0

此问题与此处答案中的代码示例有关(https://stackoverflow.com/a/70694640/2287576)。

我现在有这个建构式:

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元素。

uj5u.com热心网友回复:

由于串列数量相对较少,您可以将呼叫替换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(我已经给出了另一种形式)。

uj5u.com热心网友回复:

只需在呼叫中嵌套另一个这些Enumerable.Range(...)...呼叫Select

StudentItems =
    Enumerable.Range(1, 3).Select(x =>
        Enumerable.Range(1, 5).Select(y =>
            new MSAHistoryItemStudent()
        ).ToList()
    ).ToArray();
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *