从函数返回内存流

Amy*_*Amy 23 c#

在您看来,从函数返回新分配的内存流或将其传递给函数是否更好?例如,

void Foo(MemoryStream m) 
{ 
   m.Write(somebuffer, 0, somebuffer.Length); 
}
Run Code Online (Sandbox Code Playgroud)

要么

void MemoryStream Foo()
{
    MemoryStream retval = new MemoryStream();
    retval.Write(somebuffer, 0, somebuffer.Length);
    return retval;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 19

这有点像询问是否应该从方法返回一个字符串或者接受一个StringBuilder并附加到它.答案取决于用例是什么.

是否可能调用者想要使用包含某些数据的现有流来调用您的方法?他们可能想使用相同的流多次调用它?如果是这样,采用MemoryStream的版本将更有效.另一方面,如果他们只想要数据一次,那么将其作为MemoryStream(或者更简单地,作为字节数组)返回可能更合适.

不幸的是,从描述中我们无法确切地知道发生了什么.当然,您可以将两者都实现为重载并从另一个中调用一个.


Pop*_*lin 7

将内存流传递到函数并返回函数的内存流不应互换使用.您描述的方法有两个不同的用途.

  • 将函数传递给函数是为了让函数对函数执行某些操作.

  • 从函数返回一些东西是调用者应该对结果做某事.

你在谈论两种不同的东西,苹果和橘子.


Mar*_*ell 5

我总是将流传递给函数。这允许它与调用者选择的任何流一起工作,例如直接进入文件而无需任何缓冲。