【发布时间】:2016-05-17 21:53:17
【问题描述】:
我一直在检查我的 c# 代码并尝试将其中的大部分转换为更具功能性。
如何将这个 using 表达式转换为更具函数式风格的模式?
using (var stream = File.OpenWrite(Path.Combine(settingsFolder, settingsFilename)))
using (var writer = new someClass(stream))
{
writer.Write(settings);
}
我正在尝试使用此功能模式(将 using 替换为此 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 是静态且密封的,这种模式会不起作用吗?
【问题讨论】:
-
你打算如何使用它?
-
您不能将静态类作为参数传入。如果你想使用它,你需要将它包装在一个工厂类中。 TBH,我不清楚你为什么要重新发明这个功能完善的轮子。
-
你说的更多功能是什么意思?看起来你正在制作一个使用的包装器,而 using 已经足够“实用”和“干净”了。
-
恐怕这是一个不存在的问题的解决方案。考虑可维护性。
using()是每个 .NET 开发人员都知道的易于理解的模式。 -
我不知道你为什么要这样做,这只会让事情变得复杂。只是一个提示 - 如果您想在 .NET 上进行函数式编程,请查看 F#。
标签: c# .net functional-programming