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

C# 通过方法从数组返回多个对象,c#,methods,C#,Methods,下面的方法仅返回数组中的第一个对象 public string PRINT_CRATE() { foreach (var soda in sodaCans) { if (soda != null) { return string.Join(Environment.NewLine, soda); } else {

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

public string PRINT_CRATE()
{

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

    return null;
}
它工作得很好,除了我希望它“分组”所有对象并返回它们。现在,只返回第一个对象get


最好的方法是什么?

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

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

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

我想指出,这可能是最好的解决办法。它很短,正确地处理换行符,并输出OP可能想要的
“空位”
条目

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


如果要返回一个字符串,并将所有数据放入其中,则可能需要以下内容:

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

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

我想指出,这可能是最好的解决办法。它很短,正确地处理换行符,并输出OP可能想要的
“空位”
条目

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


可能最简单的方法就是执行Linq查询:

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

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

可能最简单的方法就是Linq查询:

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


.Select
方法允许您转换每个元素,这里我使用空合并操作符
将空值替换为
“EmptySpot”

查看字符串连接和/或StringBuilder。什么是
sodaCans
<代码>字符串[]
<代码>列表?在任何情况下,您都在对集合的单个元素使用
String.Join
,而实际上您只需要将集合传递到
String.Join
-
String.Join(Environment.NewLine,sodaCans)。最终注释-它返回第一个对象,因为您告诉它<代码>返回字符串.Join(Environment.NewLine,soda)
将在第一次找到非null元素时退出该方法。下次您输入该方法时,它将重新开始。非常感谢您的努力!查看字符串连接和/或StringBuilder。什么是
sodaCans
<代码>字符串[]<代码>列表?在任何情况下,您都在对集合的单个元素使用
String.Join
,而实际上您只需要将集合传递到
String.Join
-
String.Join(Environment.NewLine,sodaCans)。最终注释-它返回第一个对象,因为您告诉它<代码>返回字符串.Join(Environment.NewLine,soda)
将在第一次找到非null元素时退出该方法。下次您输入该方法时,它将重新开始。非常感谢您的努力<代码>字符串。加入
甚至
StringBuilder
都比
+=
好。非常感谢!当我看到它时,它是如此明显。但我还是太新鲜了,还没弄明白。再次感谢mate=)@Tim,感谢他从这种编码开始,我认为使用简单字符串更容易理解。此外,我很确定编译器或jit会在幕后使用StringBuilder,在这种明显的情况下。@justme不,编译器/jit不会重写您的代码来使用StringBuilder。还要注意的是,你的代码在字符串的开头加了一个换行符,而string.join不会这样做。@justme-鉴于OP在他们的问题中有
string.join
,我认为最好向他们展示如何正确使用它来实现他们想要的结果,并解释为什么
String.Join
StringBuilder
+=
更好,但这只是我的选择。
String.Join
甚至
StringBuilder
+=/code>更好。非常感谢!当我看到它时,它是如此明显。但我还是太新鲜了,还没弄明白。再次感谢mate=)@Tim,感谢他从这种编码开始,我认为使用简单字符串更容易理解。此外,我很确定编译器或jit会在幕后使用StringBuilder,在这种明显的情况下。@justme不,编译器/jit不会重写您的代码来使用StringBuilder。还要注意的是,你的代码在字符串的开头加了一个换行符,而string.join不会这样做。@justme-鉴于OP在他们的问题中有
string.join
,我认为最好向他们展示如何正确使用它来实现他们想要的结果,并解释为什么
String.Join
StringBuilder
+=
更好,但这只是我的选择。