2013-01-18 80 views
0

獲取有關「!redirectsDictionary.ContainsKey(autoRedirect.Key)」警告可能空分配包含關鍵

asp.net可能空分配給實體標有「NOTNULL」屬性。

只是想知道那是什麼?

private static readonly Dictionary<string, Redirect> AutoRedirectsDictionary = new Dictionary<string, Redirect>(); 

foreach (var r in db.SelectItems("fast:/sitecore/content/Redirects Root//*[@@templatename='Auto Redirect']")) 
     { 
      GenerateRedirects(Context.Database.GetItem(r.Fields["Root Node"].Value), r["URL Prefix"]); 
      foreach (var autoRedirect in AutoRedirectsDictionary) 
      { 
       if (!string.IsNullOrEmpty(autoRedirect.Key) & !redirectsDictionary.ContainsKey(autoRedirect.Key)) 
       { 
        //Add to dictionary 
        redirectsDictionary.Add(autoRedirect.Key, autoRedirect.Value); 
       } 

      } 
     } 

public static void GenerateRedirects(Item redirectFolder, string urlPrefix) 
     { 
      if (redirectFolder == null) 
       return; 

      var childList = redirectFolder.GetChildren(); 

      foreach (Item child in childList) 
      { 
       if (Utilities.HasFieldValue(child, FieldToFind)) 
       { 
        var shortcutUrl = urlPrefix + child.Fields[FieldToFind].Value.ToLower(); 

        if (!string.IsNullOrEmpty(shortcutUrl) && !AutoRedirectsDictionary.ContainsKey(shortcutUrl)) 
        { 
         AutoRedirectsDictionary.Add(shortcutUrl, 
         new Redirect(String.Empty, child, true));  
        } 
       } 
       else 
       { 
        GenerateRedirects(child, urlPrefix); 
       } 
      } 
     } 
+0

你在哪條線上得到警告?警告並不總是意味着有問題 –

+0

在這行!redirectsDictionary.ContainsKey(autoRedirect.Key)在autoRedirect.Key – StevieB

回答

3

它可能與你使用單點&運營商要做。單個&不會使用短路來繞過語句,而是會在評估所有表達式之後選擇要執行的路徑。因此,即使您在ContainsKey調用之前檢查!string.IsNullOrEmpty(autoRedirect.Key),這兩個表達式都會先評估,然後決定執行路徑。

編輯,因爲我意識到我沒有真正回答你的具體問題(你可能已經知道這一點),但如果密鑰爲空,!redirectsDictionary.ContainsKey(autoRedirect.Key)將引發異常。由於密鑰的數據類型是string,如果它爲空,那麼它將會拋出異常,因此會發出警告。

+0

下面有一個警告好的感謝解釋。 – StevieB

相關問題