我有一个WPF应用程序,其中包含4个选项卡。 Tab1是第一个加载了应用程序的选项卡。我有一个Tab1Load方法(选项卡的名称),它看起来像:
private void Tab1Load(object sender, RoutedEventArgs e)
{
myConfig.LoadConfigurationData();
XiphosDB.DataContext = Xiphos.XiphosDbNames;
}
myConfig被声明在Window1.xaml.cs文件的顶部
LoadConfigData myConfig = new LoadConfigData();
LoadConfigData如下所示:
public void LoadConfigurationData()
{
LoadGen2Data();
LoadXiphosData();
LoadTestConsumerData();
}
第一个方法调用LoadGen2Data一直运行到结尾,此时它为静态对象设置了一个值。电话是:
var count = 0;
foreach (var name in Gen2.allFiNames)
{
Gen2.ApiKeys.Add(name, APIKeys[count]);
Gen2.ConnectStrings.Add(name, connectStrings[count]);
Gen2.LongNames.Add(name, LongNames[count]);
count++;
}
Gen2声明是:
public class Gen2
{
public static List<string> allFiNames { get; set; }
public static Dictionary<string, string> LongNames { get; set; }
public static Dictionary<string, string> ApiKeys { get; set; }
public static Dictionary<string, string> ConnectStrings { get; set; }
}
在调用Gen2.ApiKeys.Add之后,应用程序跳过其所在的方法(LoadGen2Data)而不调用其余的Add语句,然后退出LoadConfigurationData方法而不调用其余两个方法(LoadXiphosData)和LoadTestConsumerData)。
单步进入foreach循环的顶部我已经验证了“name”值已填充且APIKeys [count]提供了合法值(GUID)。
我没有收到任何错误。没有捕获其他调试点,我可以在应用程序GUI中移动而没有任何问题(并且没有数据)。
知道问题是什么吗?
谢谢,
杰森
答案 0 :(得分:1)
您正在点击NullReferenceException
:
public static Dictionary<string, string> LongNames { get; set; }
因为自动生成的支持属性为null
。对于其他Dictionary
变量和List
变量,也会发生这种情况。
你可以这样解决:
private static Dictionary<string, string> longNames = new Dictionary<string, string>();
public static Dictionary<string, string> LongNames { get { return longNames; } set { longNames = value; } }
在这种情况下,你甚至可以跳过设定者。
public class Gen2
{
private static List<string> allFiNames = new List<string> allFiNames();
public static List<string> AllFiNames { get { return allFiNames; } }
private static Dictionary<string, string> longNames = new Dictionary<string, string>();
public static Dictionary<string, string> LongNames { get { return longNames; } }
private static Dictionary<string, string> apiKeys = new Dictionary<string, string>();
public static Dictionary<string, string> ApiKeys { get { return apiKeys; } }
private static Dictionary<string, string> connectStrings = Dictionary<string, string>();
public static Dictionary<string, string> ConnectStrings { get { return connectStrings; } }
}