这是获取字符集合的最佳方式吗?想知道对于像char这样的原语使用List是不是太过分了?
private void GetChars(ref List<char> charsToPopulate)
{
foreach(Thing t in Things)
{
charsToPopulate.Add(t.CharSymbol);
}
} 发布于 2010-04-24 07:10:33
使用惰性序列将允许您在如何处理字符方面有很大的灵活性。你真的应该把这个方法重构成类似这样的东西。
private IEnumerable<char> GetChars(IEnumerable<Thing> things)
{
return things.Select(thing => thing.CharSymbol);
}这样他们就可以把它包装成他们想要的任何集合:
var list = GetChars(Things).ToList();
var array = GetChars(Things).ToArray();或者将该方法全部删除:
var chars = Things.Select(thing => thing.CharSymbol).ToList();发布于 2010-04-24 07:00:05
您将希望通过值传递对列表的引用,而不是通过引用:
private void GetChars(List<char> charsToPopulate) 除此之外,你的代码也没问题。使用诸如char之类的原始类型的列表是非常常见的。
如果您对编写稍有不同的相同实现感兴趣,您可以使用LINQ从以下内容填充列表:
{
charsToPopulate.AddRange(from t in things select t.CharSymbol);
}顺便说一句,在方法中创建列表没有错。在将列表传递给方法之前,您不需要“分配”列表:
private List<char> GetChars()
{
List<char> charsToPopulate = new List<char>();
foreach(Thing t in Things)
{
charsToPopulate.Add(t.CharSymbol);
}
return charsToPopulate;
}或者使用LINQ:
private List<char> GetChars()
{
return things.Select(t => t.CharSymbol)
.ToList();
}发布于 2010-04-24 07:01:21
最有效的方法是接收一个预先分配的字符数组,您可以向其中写入元素。当然,这需要提前知道大小。
第二个最有效的方法是在方法中分配数组,然后填充它。这仍然需要一些能力来快速计算Things的大小,但至少对调用者隐藏了它。
如果没有办法预先知道大小(例如,Things是一个延迟序列,它足够大,缓存它是不可行的),那么你的解决方案很可能是最好的。
https://stackoverflow.com/questions/2702420
复制相似问题