以功能方式概括“使用”
本文关键字:使用 功能 方式概 | 更新日期: 2023-09-27 18:33:35
我一直在浏览我的 c# 代码并尝试将其大部分转换为更实用。
如何使用表达式将其转换为更具功能化的样式模式?
using (var stream = File.OpenWrite(Path.Combine(settingsFolder, settingsFilename)))
using (var writer = new someClass(stream))
{
writer.Write(settings);
}
我正在尝试使用此功能模式(用此一次性模式替换使用):
public static class Disposable
{
public static TResult Using<TDisposable, TResult>(
Func<TDisposable> factory,
Func<TDisposable, TResult> map)
where TDisposable : IDisposable
{
using (var disposable = factory())
{
return map(disposable);
}
}
}
由于类文件是静态和密封的,这种模式是否不起作用?
嗯,它确实有效。我不确定你为什么要这样做,但File
静态不会以任何方式阻止你这样做。Func
需要一个工厂委托,而不是一个可以实例化的类。
此代码应该适合您:
Disposable.Using
( () => Disposable.Using
( () => File.OpenWrite(path)
, stream => new someClass(stream)
)
, writer => { writer.Write(settings); return true; }
);
但是,处理存在问题,因为内部using
已经处理完毕。如果可能,您应该将stream
丢弃在someClass
中。如果不可能,只需使用 using
.
return true
之所以存在,只是因为Func
需要返回类型。在这种情况下,Action
会更适合。