Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET设置有问题。重新加载()和设置。保存()设置未加载_C#_.net_Configuration_Settings - Fatal编程技术网

C# .NET设置有问题。重新加载()和设置。保存()设置未加载

C# .NET设置有问题。重新加载()和设置。保存()设置未加载,c#,.net,configuration,settings,C#,.net,Configuration,Settings,我有一个奇怪的问题,我想不出来。我有一个继承ApplicationSettingsBase的自定义设置类。它具有如下所示的用户范围设置 /// <summary> /// The Last Active Account /// </summary> [UserScopedSettingAttribute()] public AccountKeyClass ActiveAccount { get

我有一个奇怪的问题,我想不出来。我有一个继承ApplicationSettingsBase的自定义设置类。它具有如下所示的用户范围设置

    /// <summary>
    /// The Last Active Account
    /// </summary>
    [UserScopedSettingAttribute()]
    public AccountKeyClass ActiveAccount
    {
        get
        {
            try
            {
                return (AccountKeyClass)this["ActiveAccount"];
            }
            catch(Exception error){}
            return null;
        }
        set
        {
            this["ActiveAccount"] = value;
            if (!this.AccountList.Contains(value))
            {
                //this.AccountList.Add(value);
            }
        }
    }

    /// <summary>
    /// Account List
    /// Key: UserID
    /// Value: AccountKeyClass
    /// </summary>
    [UserScopedSettingAttribute()]
    public List<AccountKeyClass> AccountList
    {
        get
        {
            try
            {
                if(this["AccountList"] != null)
                    return (List<AccountKeyClass>)this["AccountList"]; 
            }
            catch(Exception error){}
            return null;
        }
        set { this["AccountList"] = value; }
    }
//
///最后一个活动帐户
/// 
[UserScopedSettingAttribute()]
公共帐户KeyClass ActiveAccount
{
得到
{
尝试
{
返回(AccountKeyClass)此[“ActiveAccount”];
}
捕获(异常错误){}
返回null;
}
设置
{
此[“ActiveAccount”]=值;
如果(!this.AccountList.Contains(value))
{
//此.AccountList.Add(值);
}
}
}
/// 
///帐户列表
///密钥:用户ID
///值:AccountKeyClass
/// 
[UserScopedSettingAttribute()]
公开名单
{
得到
{
尝试
{
如果(此[“AccountList”]!=null)
返回(列出)此[“会计清单”];
}
捕获(异常错误){}
返回null;
}
设置{this[“AccountList”]=value;}
}
我有两个表单,一个主表单和一个设置表单,可以在其中更改应用程序设置。当我创建SettingsForm和change AccountList设置值时,user.config文件会发生异常更改。设置的“应用/确定”按钮窗体先调用Settings.Save(),然后调用Settings.Reload(),然后关闭窗体。问题是当调用.Reload()时,Settings.AccountList变为null

更重要的是user.config文件永远不会更改,如果我关闭应用程序并重新打开,user.config文件仍然正确,但Settings.AccountList永远不会被读入

但是,如果我从未调用.Reload(),则会读入Settings.AccountList

更新: 如果我创建一个列表并保存();从我的MainForm,然后将从我的user.config.fine读入AccountList。但是,如果我使用辅助表单(SettingsForm)添加到AccountList并调用Save(),则下次运行应用程序时,不会读入设置,并在其位置返回空值。即使我不使用Reload(),也会发生这种情况


我认为问题与使用通用列表有关。正在保存的AccountKeyClass被保存为序列化XML。

我记得.Reload()存在类似的问题。只是为了好玩。。。尝试在发行版中运行它,或者在安装程序中运行任何非调试模式(如果您尚未这样做)。

请澄清您是在更改AccountList属性还是在更改其内容

如果在列表中添加或删除项,则Settings.Save()将不会保存该项,因为它看不到该属性已更改

试着这样做:

var temp = settings.AccountList;
settings.AccountList = null;
settings.AccountList = temp;
settings.Save();

我还要加上这个。我当时在想它可能与设计器/调试器(VStudio)有关。因此,我尝试直接从bin\debug目录运行应用程序,因此没有附加调试器。不过,我没有尝试从发布版本运行它,我一回到家就会尝试。这似乎不起作用。但是我在原来的问题中添加了一个更新。你是说.Save()只保存/写入已更改的值吗?当我从主窗体中执行.Save()时,即使我正在执行.Add(),它似乎也能正常工作。我试试看会发生什么。谢谢你的回复。