我试图传递流作为参数,但我不确定哪种方式是“最好的”所以我想听听你对我的代码示例的意见/建议
@H_404_2@我个人更喜欢选项三,但我更新看到它在其他地方以这种方式完成.
@H_404_2@选项1适用于小流(以及已知大小的流)
@H_404_2@选项2_1和2_2总是让“管理员”怀疑谁有责任处置/关闭.
public interface ISomeStreamHandler { // Option 1 void HandleStream(byte[] streamBytes); // Option 2 void HandleStream(Stream stream); // Option 3 void HandleStream(Func<Stream> openStream); } public interface IStreamProducer { Stream GetStream(); } public class SomeTestClass { private readonly ISomeStreamHandler _streamHandler; private readonly IStreamProducer _streamProducer; public SomeTestClass(ISomeStreamHandler streamHandler,IStreamProducer streamProducer) { _streamHandler = streamHandler; _streamProducer = streamProducer; } public void DoOption1() { var buffer = new byte[16 * 1024]; using (var input = _streamProducer.GetStream()) { using (var ms = new MemoryStream()) { int read; while ((read = input.Read(buffer,buffer.Length)) > 0) { ms.Write(buffer,read); } _streamHandler.HandleStream(ms.ToArray()); } } } public void DoOption2_1() { _streamHandler.HandleStream(_streamProducer.GetStream()); } public void DoOption2_2() { using (var stream = _streamProducer.GetStream()) { _streamHandler.HandleStream(stream); } } public void DoOption3() { _streamHandler.HandleStream(_streamProducer.GetStream); } }@H_403_10@