【发布时间】:2018-11-28 09:19:45
【问题描述】:
假设我有一个带有 ToStream() 方法的字符串类。
class FooBar
{
pubic Stream ToStream( )
{
byte[ ] barFooBytes = Encoding.UTF8.GetBytes( this.BarFoo );
return new MemoryStream( barFooBytes );
}
}
现在假设我有一个类得到这个流。
class BarFoo
{
pubic void DoCrazyStuff( )
{
using( Stream fooBarStream = ( new FooBar( ) ).ToStream( ) )
{
// Doing some really crazy stuff!
}
}
}
在创建流的方法之外使用using 仍然有意义吗?
提示: 这不是真实的现实生活场景。这是一个纯粹的技术问题。所以这个代码被缩小只是为了澄清问题。
【问题讨论】:
-
为什么
new Foobar()- 如果ToStream方法不需要持久实例状态,为什么不将其设为静态方法? -
假设我可以创建一个
Action<List<MyAwesomeClass>>,这有意义吗?唯一正确的答案是:视情况而定。我们需要了解更多细节才能做出有根据的猜测。 -
另外,如果数据本身是
Byte[],我建议不要将Byte[]作为MemoryStream返回,除非您在其他地方有需要它的约束或用例。如果数据主要是Byte[],但某些消费者需要它作为Stream,那么将其包装在MemoryStream中应该是消费者的责任,而不是生产者的责任。 -
请不要用脏话提问,谢谢
-
@dai 问题不在于
FooBar的实例化。这是关于流上的using作为返回值。而这个 sn-p 只是说明了我的意思。 @liam 我在哪里使用了脏话?