以功能方式概括“使用”

本文关键字:使用 功能 方式概 | 更新日期: 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会更适合。