Nob*_*ody 18 c# pass-by-reference
我正在制作一个从服务器获取文件名列表的方法,但我遇到了一个我无法回答的问题.
该方法返回两件事:
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是an SftpResult和an 的复合对象ArrayList)
这是首选,为什么?
Jon*_*eet 32
我个人更喜欢最后一个选项(虽然使用List<T>或ReadOnlyCollection<T>代替ArrayList).out参数基本上是一种返回多个值的方法,封装它们通常更好.
.NET 4中的另一个选择是
Tuple<SftpResult, ArrayList> GetFileList(string directory)
Run Code Online (Sandbox Code Playgroud)
这明确地说,"这个方法返回两件事......我已经为这个特殊情况将它们打包在一起,但是不值得进一步封装它们:它们不值得在一个单独的类型中进行编写".
(如果您不使用.NET 4,您可以随时编写自己的Tuple类型.)
我宁愿把它包装在一个返回对象中:
class FileResult
{
public FileResult(SftpResult resultCode, IEnumerable<string> files)
{
ResultCode = resultCode;
FileList = new List<string>(files);
}
public SftpResult ResultCode { get; private set; }
public IEnumerable<string> FileList { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
不使用会感觉更清洁out.