【发布时间】:2011-04-10 17:18:08
【问题描述】:
我正在制作一种从服务器获取文件名列表的方法,但我遇到了一个我无法回答的问题。
该方法返回两件事:
-
SftpResult,它是一个具有多种返回码的枚举。 - 文件名列表。
在这三个签名中:
public static ArrayList GetFileList(string directory, out SftpResult result)
public static SftpResult GetFileList(string directory, out ArrayList fileNames)
public static SftpFileListResult GetFileList(string directory)
(其中SftpFileListResult 是SftpResult 和ArrayList 的复合对象)
哪个是首选,为什么?
【问题讨论】:
-
SftpResult 的目的是什么?如果它应该解释调用失败的原因,也许你应该抛出一个异常。
-
考虑到我所做的只是报告状态,我认为这太过分了。如果它失败,这不是一个严重的问题,而且我真的不需要仅仅因为他们输入了错误的目录而展开堆栈。我只是返回一个 DirectoryNotFound 并继续我的业务 :-)
-
考虑放弃使用 ArrayList 转而使用 IEnumerable
。 -
谢谢 Eric,我现在正在尝试这样做。有没有更短的写法:
return new ReadOnlyCollection<string>((List<string>)(IEnumerable<string>)Connection.SshConnection.GetFileList(directory));??Connection.SshConnection.GetFileList(directory)部分返回ArrayList -
@rmx Enumerable.Cast 和 List.AsReadOnly 可以在这里提供帮助
return ...GetFileList(directory).Cast<string>().ToList().AsReadOnly();
标签: c# pass-by-reference