Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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# 每次运行后,在项目设置中将通用列表与自定义类一起使用将变为空_C#_Application Settings - Fatal编程技术网

C# 每次运行后,在项目设置中将通用列表与自定义类一起使用将变为空

C# 每次运行后,在项目设置中将通用列表与自定义类一起使用将变为空,c#,application-settings,C#,Application Settings,我有一个程序,它的一部分包括注册一个用户,然后用他每次注册时提供的用户名密码登录。 我知道这可以通过一个简单的数据库来完成,但我想用项目设置来代替。 我有一个用户类: class User { public string name { get; set; } public string username { get; set; } public string password { get; set; } public string email { get; set

我有一个程序,它的一部分包括注册一个用户,然后用他每次注册时提供的用户名密码登录。 我知道这可以通过一个简单的数据库来完成,但我想用项目设置来代替。 我有一个用户类:

class User
{
    public string name { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string email { get; set; }
    public User(string name, string username, string password, string email)
    {
        this.name = name;
        this.username = username;
        this.password = password;
        this.email = email;
    }
}
然后在本页使用这篇文章(来自伊斯梅尔·德加尼): 现在我创建了一个列表,这是xml部分:

<Setting Name="Users" Type="System.Collections.Generic.List`1[Forum.User]" Scope="User">
  <Value Profile="(Default)" />
</Setting>

很可能您需要将设置的范围更改为应用程序级别,而不是用户级别

<Setting Name="Users" Type="System.Collections.Generic.List`1[Forum.User]" Scope="Application">
  <Value Profile="(Default)" />
</Setting>

要在设置文件中保存和重新加载
用户
对象列表,需要将类公开,并提供一个默认(无参数)构造函数。(默认构造函数可以是私有的。)

如果该类不是公共类,则不会将数据写入设置文件


如果没有默认的无参数构造函数,数据将不会再次从文件中读取。

不要以纯文本形式存储密码。请显示调用列表的代码。我不是100%确定,但可能需要(无参数)
用户
类的默认构造函数。Slaks:这不是安全问题或任何问题。它只是一个简单的程序。elgonzo:我试过了,但没有成功either@user3003613,我刚刚根据您问题中给出的代码测试了您的案例。一个没有参数的默认构造函数显然是不够的,类还需要是公共的。请参阅我的答案。谢谢,在重新运行程序后它会工作。但是,当我关闭visual studio并再次启动它时,所有数据都会消失。@user3003613,请注意,您将设置写入“用户”范围,因此这些设置会保存在用户的配置文件目录中。你确定你的应用程序是在同一个用户帐户下运行的吗?是的。但现在它可以工作了。我所要做的就是将设置属性从“从不复制”更改为“复制(如果更新)”。
 private void sabtuser()
    {
        User newuser = new User(tb_name.Text, tb_username.Text, tb_password.Text, tb_email.Text);
        Settings.Default.Users.Add(newuser);
        Settings.Default.Count++;
        Settings.Default.Save();
        this.Close();
    }
<Setting Name="Users" Type="System.Collections.Generic.List`1[Forum.User]" Scope="Application">
  <Value Profile="(Default)" />
</Setting>
public class User
{
    private User() {}

    public string name { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string email { get; set; }
    public User(string name, string username, string password, string email)
    {
        this.name = name;
        this.username = username;
        this.password = password;
        this.email = email;
    }
}