在C#应用程序中,变量不断重置为null,为什么?

在C#应用程序中,变量不断重置为null,为什么?,c#,visual-studio,C#,Visual Studio,我正在构建一个桌面应用程序。在Program.cs中,我有: public struct Settings { public string SiteName; public string IP3Oktets; public string Data_Source; public string Initial_Catalog; public string officialCardNumber; public bool KarticaUcit

我正在构建一个桌面应用程序。在
Program.cs
中,我有:

public struct Settings
{
     public string SiteName;
     public string IP3Oktets;
     public string Data_Source;
     public string Initial_Catalog;
     public string officialCardNumber;
     public bool KarticaUcitacu;
     public Dictionary<string, object> KarticuUbacio;
     public Dictionary<string, object> Korisnik;
     public Dictionary<string, object> PoslednjiUgovor;
     public Version Version;
     public string userName;
}

public static Settings mySettings = new Settings();
然后,当主窗体打开时,我会丢失所有
Dictionary
值(它们变为null)

我做错了什么?程序是否可能保留它们的引用而不是值

谢谢, 德扬

更新:

  • 第一次登录后

  • 在第二次登录时,但在更改mySettings全局变量的任何属性之前

修复

我发现这是导致问题的原因:

Program.Settings s = Program.mySettings;
看起来这实际上是复制对象,而不是保留mySettings变量的引用,所以我删除了它。我将使用Program.mySettings,即使这要写得更多


谢谢

您可以将
设置
类型从
结构
更改为
,C#将不再在赋值时复制它。

我从未见过你在结构中为字典赋值,但老实说,我建议你使用内置的设置系统,而不是自己滚动。不清楚你是如何赋值或结构实例存储在哪里的。这两项都是重要的信息。但我怀疑,如果您关闭一个声明了设置变量的表单,然后稍后重新创建它,这可能是问题的原因。试着先隐藏表单。我添加了一些照片来向您展示我所说的内容,请注意,frm_login只是隐藏而不是销毁,您将看到只有一些变量丢失,frm_login中设置的变量让我们假设在隐藏frm_login后,所有设置的变量都丢失了,我如何制作副本并保存它们。请注意,在德尔福我没有这样的问题。我们不需要照片,我们相信你。我们只需要足够的代码来理解它是如何工作的,并且能够提出修复建议
    this.Hide();
    var form2 = new frm_glavna(); //main form
    form2.Closed += (ss, args) => this.Close();
    form2.Show();
    var form3 = new frm_RazduživanjeLogin(); //another login 
    form3.ActiveControl = form3.txt_Lozinka;

    form3.ShowDialog(this);
Program.Settings s = Program.mySettings;