通过方法从数组返回多个对象

时间:2015-05-20 23:18:47

标签: c# methods

以下方法仅返回数组中的第一个对象。

public string PRINT_CRATE()
{

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

    return null;
}

它工作得很好,除了我希望它"分组"所有对象并返回它们。就像现在一样,只返回第一个对象。

最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

你要求的最简单的事情可能是Linq查询:

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

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

答案 1 :(得分:1)

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

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

    return rv;
}
编辑:根据评论,我的解决方案是次优的。

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

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

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();
    }
}