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 が呼び出された直後に、アプリケーションは残りの Add ステートメントを呼び出さずにそのメソッド (LoadGen2Data) をスキップし、残りの 2 つのメソッド (LoadXiphosData と LoadTestConsumerData) を呼び出さずに LoadConfigurationData メソッドを終了します。 .

foreach ループの先頭に足を踏み入れると、"name" 値が入力され、APIKeys[count] が正当な値 (GUID) を提供することを確認しました。

エラーは表示されません。他のデバッグ ポイントは捕捉されず、アプリケーション GUI を問題なく (データなしで) 移動できます。

問題は何ですか?

ありがとう、

ジェイソン

4

1 に答える 1

1

あなたは打ってNullReferenceExceptionいます:

public static Dictionary<string, string> LongNames { get; set; }

自動生成されたバッキング プロパティは であるためですnullDictionaryこれは、他の変数と変数についても起こりListます。

次のように修正できます。

private static Dictionary<string, string> longNames = new Dictionary<string, string>();

public static Dictionary<string, string> LongNames { get { return longNames; } set { longNames = value; } }

この場合、setter をスキップすることもできます。

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 に答える