Return 通过方法从数组中获取多个对象

Return Multiple Objects From Array Through a Method

下面的方法 return 只是数组中的第一个对象。

public string PRINT_CRATE()
{

    foreach (var soda in sodaCans)
    {
        if (soda != null)
        {
            return string.Join(Environment.NewLine, soda);                    
        }
        else
        {
            return ("Empty spot");
        }
    }

    return null;
}

它工作正常,除了我希望它 "group up" 所有对象和 return 它们。就像现在一样,只有第一个对象得到 returned。

最好的方法是什么?

如果你想 return 一个包含所有数据的字符串,你可能正在寻找类似的东西:

public string PrintCrate()
{
    string rv = "";
    foreach (var soda in sodaCans)
    {
        if (soda != null)
        {
            rv += "\n" + soda;                    
        }
    }

    return rv;
}

编辑:根据评论,我的解决方案不是最优的。

我想指出, 可能是最好的解决方案。它很短,正确处理换行符,并输出 OP 可能想要的 "Empty Spot" 条目。

出于教育价值,我将包含一个带有 StringBuilder 和手动枚举的版本,该版本与 Erik 的答案相当,因为它接近 string.Join():[=16= 的实现]

public string PrintCrate()
{
    using (var enumerator = sodaCans.GetEnumerator())
    {
        if (!enumerator.MoveNext())
            return null
        var stringBuilder = new StringBuilder();
        stringBuilder.Append(enumerator.Current ?? "EmptySpot");
        while (enumerator.MoveNext())
        {
            stringBuilder.Append(Environment.NewLine);
            stringBuilder.Append(enumerator.Current ?? "EmptySpot");
        }
        return StringBuilder.ToString();
    }
}

执行您要求的最简单的事情可能是 Linq 查询:

return string.Join(Environment.NewLine, sodaCans.Select(x => x ?? "EmptySpot"));   

.Select 方法允许您转换每个元素,这里我使用空合并运算符 ?? 将空值替换为 "EmptySpot"