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
比+=
更好,但这只是我的选择。