C# 如何在System.Func中应用using模式?

C# 如何在System.Func中应用using模式?,c#,dispose,func,C#,Dispose,Func,通常,我使用一个具有众所周知的使用模式的内存流 使用(var mem=new MemoryStream(blob)) { foo(mem); } 不,想象一下,在我必须使用的客户端库中定义了一个函数bar(Func)。我可以这样称呼它 bar(()=>newmemoryStream(blob)); 但是,没有人正确地处理这条河流。如何解决这个问题?Func是否应该与IDisposable类型一起使用?它似乎是一个设计拙劣的库 如果您知道库没有处理流,并且没有保存函数供以后使用,则可以执行以下

通常,我使用一个具有众所周知的使用模式的内存流

使用(var mem=new MemoryStream(blob))
{
foo(mem);
}
不,想象一下,在我必须使用的客户端库中定义了一个函数
bar(Func)
。我可以这样称呼它

bar(()=>newmemoryStream(blob));

但是,没有人正确地处理这条河流。如何解决这个问题?
Func
是否应该与
IDisposable
类型一起使用?

它似乎是一个设计拙劣的库

如果您知道库没有处理流,并且没有保存
函数供以后使用,则可以执行以下操作:

using(var mem = new MemoryStream(blob))
{
    bar(() => mem);
}

这似乎是一个设计拙劣的图书馆

如果您知道库没有处理流,并且没有保存
函数供以后使用,则可以执行以下操作:

using(var mem = new MemoryStream(blob))
{
    bar(() => mem);
}

为什么不把第一段代码放到Func中呢?只需在函数中添加括号body@Aggsol此功能的主要用途是什么?为什么要返回流对象呢?如果您需要一个字节数组或一个文件或其他影响您的内容,您可以从
FUNC
auX返回该数组。如果OP在函数中添加了using语句,则在调用return时将释放流。我记得,您可以调用
.Dispose()
方法hand@RyanWilson我不知道这是我必须使用的客户端库。通常,
IDisposable
的创建者是所有者,因此创建对象的人负责处理它。因此,
bar
方法应该处理它。但是,
Func
是创建一个对象还是只提供一个现有实例尚不清楚。在这种情况下,提供
Func
的类应该处理该对象。为什么不将第一段代码放入Func中呢?只需在函数中添加括号body@Aggsol此功能的主要用途是什么?为什么要返回流对象呢?如果您需要一个字节数组或一个文件或其他影响您的内容,您可以从
FUNC
auX返回该数组。如果OP在函数中添加了using语句,则在调用return时将释放流。我记得,您可以调用
.Dispose()
方法hand@RyanWilson我不知道这是我必须使用的客户端库。通常,
IDisposable
的创建者是所有者,因此创建对象的人负责处理它。因此,
bar
方法应该处理它。但是,
Func
是创建一个对象还是只提供一个现有实例尚不清楚。在这种情况下,提供
Func
的类应该处理该对象。