0

我有一个包含 4 个选项卡的 WPF 应用程序。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 循环的顶部,我已验证“名称”值已填充,并且 APIKeys[count] 提供了合法值(GUID)。

我没有收到任何错误。没有其他调试点被捕获,我可以毫无问题地在应用程序 GUI 中移动(也没有数据)。

知道问题是什么吗?

谢谢,

杰森

4

1 回答 1

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; } }
}
于 2011-09-19T21:53:06.943 回答