【发布时间】:2014-01-15 11:50:28
【问题描述】:
我正在为转换器的构造函数使用创建方法。
public void loadData()
{
byte [] data = new byte [] {......}; // some byte data in here
var converter = GetDataConverter(data);
}
现在在 GetDataConverter 中,我需要从二进制数据创建一个内存流(转换器是第 3 方并采用流) 如果我像这样编写 GetDataConverter,我会收到一个错误,告诉我我没有处理我理解的。我创建了一个 MemoryStream,我需要处理。
public MyDataConverter GetDataConverter(byte [] data)
{
return new MyDataConverter(new MemoryStream(data));
}
所以我的解决方案是这样的:
public MyDataConverter GetDataConverter(byte [] data)
{
using(var ms = new MemoryStream(data))
{
return new MyDataConverter(ms);
}
}
问题是,我的解决方案是否正确?我应该在这里使用“使用”吗?一旦超出范围,“使用”不会破坏我的内存流,因此转换器将无事可做吗?
我需要一个答案和一个解释,我对这里的整个“使用”事情有点含糊。
谢谢
【问题讨论】:
-
C# using statement 的可能重复项
-
“MyDataConverter”应该实现“IDisposable”并负责处理“MemoryStream”。
-
@vape:那个并没有真正回答我的问题。我想知道如果我在构造函数周围调用它,“使用”将如何影响我的转换器的其余部分。
-
@user3177615 使用 Alessandro 建议的解决方案(实际上我认为值得作为答案发布)
-
@user3177615 因为它使用一次性资源。当不再需要资源时,资源用户有责任清理该资源。经验法则如下 - 如果您的班级使用 IDisposable 资源,那么班级也应该是 IDisposable