.net 字符串数组是从函数传回值集合的好结构吗?

.net 字符串数组是从函数传回值集合的好结构吗?,.net,return-value,.net,Return Value,我在.NET应用程序中有一个函数,它对一组文件进行操作,并将一些文件写入磁盘。我想返回已写入磁盘的文件名集合。对于返回的集合,我要做的就是遍历每个集合并对文件执行一个操作。我最初认为字符串数组在这种情况下是最好的,但我想我可以在这里问一下,以防另一种结构可能更好。例如,如果我只是在集合中循环,那么列表会不会有些过分呢?我正在使用VB.NET编写函数,但C#示例也很好。谢谢。如果您真正需要做的只是迭代结果,那么从函数返回一个IEnumerable就足够了。 这可以防止调用方耦合到任何特定的数据结构

我在.NET应用程序中有一个函数,它对一组文件进行操作,并将一些文件写入磁盘。我想返回已写入磁盘的文件名集合。对于返回的集合,我要做的就是遍历每个集合并对文件执行一个操作。我最初认为字符串数组在这种情况下是最好的,但我想我可以在这里问一下,以防另一种结构可能更好。例如,如果我只是在集合中循环,那么
列表
会不会有些过分呢?我正在使用VB.NET编写函数,但C#示例也很好。谢谢。

如果您真正需要做的只是迭代结果,那么从函数返回一个
IEnumerable
就足够了。

这可以防止调用方耦合到任何特定的数据结构。。。它们所需要的只是可以迭代的东西。然后,您的实现就可以自由地使用和返回任何有意义的结构—一个
列表
、一个
哈希集
、一个
字符串[]
。。。这并不重要。事实上,如果需要,您可以自由创建一个数据结构而不是一个简单的列表——只要它实现了
IEnumerable
接口,您的调用者就不会受到影响


我想一个不同的问题是数组是否是一个好的结构,用于内部使用以建立一组文件名。对于您的操作来说,固定大小但可变的集合真的是最好的构造吗?通常,这样的操作不知道要对多少项进行操作——在这种情况下,可变大小的集合(如

List
HashSet
)更有意义。那么,为什么仅仅为了返回这样一个集合而将其转换为阵列会产生成本呢?

框架外设计指南-Icaza和Hejlsberg

8.1“更喜欢使用集合而不是数组作为公共API”

8.3.3“更喜欢收藏而不是阵列”

但是


考虑在低级API中使用数组,以最小化内存消耗并最大限度地提高性能。”(也是8.3.3的一部分)

我非常喜欢你在上一段中所说的话。你说得很好,我可能没有固定数量的文件名。非常感谢。