我一直在浏览我的c#代码并尝试将其中的大部分转换为更具功能性。
如何将使用表达式转换为更具功能性的模式?
using (var stream = File.OpenWrite(Path.Combine(settingsFolder, settingsFilename)))
using (var writer = new someClass(stream))
{
writer.Write(settings);
}
我正在尝试使用此功能模式(将使用替换为 Disposable):
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是静态密封的,这种模式是否会起作用?
答案 0 :(得分:2)
嗯,确实有效。我不确定你为什么要这样做,但是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
更适合。