在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;