以下方法仅返回数组中的第一个对象。
public string PRINT_CRATE()
{
foreach (var soda in sodaCans)
{
if (soda != null)
{
return string.Join(Environment.NewLine, soda);
}
else
{
return ("Empty spot");
}
}
return null;
}
它工作得很好,除了我希望它"分组"所有对象并返回它们。就像现在一样,只返回第一个对象。
最佳方法是什么?
答案 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();
}
}