这个函数可以用更有效的方式编写吗?

Can this function be written in more efficient way?

我刚刚从函数中获取星期几。如果是假期周,则只需在每天后添加单词 'holiday'。

    public IEnumerable<string> GetDays(bool isHolidayWeek)
    {
        var days= new List<string>() { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
        var i = 0;
        if (isHolidayWeek)
            foreach (var day in days)
                days[i++] = day + " Holiday";

        return days;
    }

所以这可以用更有效的方式来写吗?也许使用 yield return?

当然可以。

为什么每次调用函数都要new一个数组?两次通话之间的日子会改变吗?上次我检查时,他们在过去 500 年左右(可能更多)内没有。在方法调用之外创建一个字符串数组,用于存储带有所需后缀文字的日期,并在需要时使用该数组。

您可以使用 System.Linq 中的 Select 方法来简化您的代码,并且 return 添加了 Holiday 的日期名称(当 isHolidayWeek 等于 true).将 Days 集合移到方法之外也有助于最大限度地减少内存消耗(一点点)

public static readonly IList<string> Days = new List<string>()
    {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};

public static IEnumerable<string> GetDays(bool isHolidayWeek)
{
    if (isHolidayWeek)
        return Days.Select(d => $"{d} Holiday");
    return Days;
}

我的回答就好像你纯粹是在谈论优化速度一样。

在初始化任何东西之前检查函数开头的布尔值。 将 foreach 替换为 for 循环,并将列表替换为字符串数组(您总是需要一周中的 7 天来确定其大小)。这些替换中的任何一个都可以在内部提高循环速度,并且结合它们应该使您的循环在性能方面的效率提高 5 倍左右。如果您大量使用此方法,这很重要。