0

「!redirectsDictionary.ContainsKey(autoRedirect.Key)」で警告が表示される

「notnull」属性でマークされたエンティティへのasp.net可能なnull割り当て。

それが何であるか疑問に思っていますか?

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);
                }
            }
        }
4

1 に答える 1

3

単一の&演算子の使用に関係している可能性があります。シングル&はステートメントをバイパスするためにショートサーキットを使用しませんが、代わりにすべての式が評価された後に実行するパスを選択します。したがって!string.IsNullOrEmpty(autoRedirect.Key)、ContainsKey 呼び出しの前にチェックしていても、両方の式が最初に評価され、次に実行パスが決定されます。

特定の質問に真に答えていないことに気付いたので編集しました(そして、すでにこれを知っているかもしれません)が!redirectsDictionary.ContainsKey(autoRedirect.Key)、キーがnullの場合は例外をスローします。キーのデータ型は astringであるため、null の場合は例外がスローされる可能性があるため、警告が表示されます。

于 2013-01-18T17:02:55.007 に答える