c# - Dispose() 是将数据保存到光盘的好地方吗?

标签 c# dispose idisposable

出于学习目的,我正在创建一个基于 json 的平面文件数据库。我正在更改 JsonDatabase 对象包含的数据,但我只想在完成所有更改后将它们保存到光盘。

这是我目前的做法:

 public class UserMatch
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class JsonDatabase : IJsonDatabase, IDisposable
{

    private readonly FileStream _jsonDatabaseStream;

    private List<UserMatch> _userMatches;
    public List<UserMatch> UserMatches
    {
        get
        {
            if (_userMatches == default(List<UserMatch>))
            {
                string fileContent;
                using (var sr = new StreamReader(_jsonDatabaseStream))
                {
                    fileContent = sr.ReadToEnd();
                }
                _userMatches = JsonConvert.DeserializeObject<List<UserMatch>>(fileContent);
            }
            return _userMatches;
        }
        set { _userMatches = value; }
    }

    public JsonDatabase(string fileLocation)
    {
        _jsonDatabaseStream = File.Open(fileLocation, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
    }

    public void Dispose()
    {
        string serialisedJson = JsonConvert.SerializeObject(UserMatches);
        using (var sr = new StreamWriter(_jsonDatabaseStream))
        {
            sr.Write(serialisedJson);
        }
        _jsonDatabaseStream.Dispose();
    }
}

Dispose() 是执行此操作的正确位置吗?或者我应该创建一个单独的提交/保存方法?

最佳答案

Is Dispose() the correct place to do this?

不,它用于清理。不要通过混入其他问题来混淆事情。

Or should I rather create a separate Commit/Save method?

是的,这会迫使调用代码专注于调用它的方式和时间。而且它简单得多。

关于c# - Dispose() 是将数据保存到光盘的好地方吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46947425/

相关文章:

entity-framework - Entity Framework : detaching but keeping object graph

c# - 确定托管资源与非托管资源

c# - 在数据透视表无法削减并且数据来自许多地方的情况下,如何自动化地按计划进行报告?

c# - 我的发送功能(套接字库:system.net&system.net.sockets)有一些错误

java - Selenium 中的 dispose() 错误

c# - 使用 WebChannelFactory 创建后处理客户端

.net - 设计困境: who should handle disposable parameter?

c# - 我可以强制对 IDisposable 类的实例使用 'using' 语句吗?

c# - 如何正确监控 MassTransit Courier 路由单?

c# - Enum 可以包含其他 Enum 吗?