C# 字典中可能的空赋值包含键
正在获取有关“!redirectsDictionary.ContainsKey(autoRedirect.Key)”的警告 asp.net可能为标记为“notnull”属性的实体分配空值 只是想知道这是怎么回事C# 字典中可能的空赋值包含键,c#,asp.net,resharper,C#,Asp.net,Resharper,正在获取有关“!redirectsDictionary.ContainsKey(autoRedirect.Key)”的警告 asp.net可能为标记为“notnull”属性的实体分配空值 只是想知道这是怎么回事 private static readonly Dictionary<string, Redirect> AutoRedirectsDictionary = new Dictionary<string, Redirect>(); foreach (var r i
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);
}
}
}
private static readonly Dictionary AutoRedirectsDictionary=new Dictionary();
foreach(db.SelectItems中的var r(“fast:/sitecore/content/Redirects Root/*[@@templatename='Auto Redirect']))
{
GenerateRedirects(Context.Database.GetItem(r.Fields[“Root Node”].Value),r[“URL Prefix”]);
foreach(AutoRedirectsDictionary中的var autoRedirect)
{
如果(!string.IsNullOrEmpty(autoRedirect.Key)&!redirectsDictionary.ContainsKey(autoRedirect.Key))
{
//添加到字典
redirectsDictionary.Add(autoRedirect.Key、autoRedirect.Value);
}
}
}
公共静态void生成器重定向(项重定向文件夹,字符串URL前缀)
{
如果(重定向文件夹==null)
返回;
var childList=redirectFolder.GetChildren();
foreach(子项列表中的子项)
{
if(Utilities.HasFieldValue(子项,FieldToFind))
{
var shortcutUrl=urlpefix+child.Fields[FieldToFind].Value.ToLower();
如果(!string.IsNullOrEmpty(shortcutUrl)&&!AutoRedirectsDictionary.ContainsKey(shortcutUrl))
{
AutoRedirectsDictionary.Add(shortcutUrl,
新重定向(String.Empty,child,true));
}
}
其他的
{
GenerateDirects(子级,URL前缀);
}
}
}
这可能与您使用单个&
运算符有关。单个&
不会使用短路来绕过语句,而是在计算完所有表达式后选择要执行的路径。因此,即使您正在检查!string.IsNullOrEmpty(autoRedirect.Key)
在ContainsKey调用之前,将首先计算这两个表达式,然后确定执行路径
当我意识到我没有真正回答你的具体问题(你可能已经知道这一点)时,我进行了编辑,但是
!redirectsDictionary.ContainsKey(autoRedirect.Key)
将在密钥为null时引发异常。由于键的数据类型是一个字符串
,如果它为空,则可能会引发异常,因此会发出警告。这可能与您使用单个&
运算符有关。单个&
不会使用短路来绕过语句,而是在计算完所有表达式后选择要执行的路径。因此,即使您正在检查!string.IsNullOrEmpty(autoRedirect.Key)
在ContainsKey调用之前,将首先计算这两个表达式,然后确定执行路径
当我意识到我没有真正回答你的具体问题(你可能已经知道这一点)时,我进行了编辑,但是
!redirectsDictionary.ContainsKey(autoRedirect.Key)
将在密钥为null时引发异常。由于键的数据类型是一个字符串
,如果它为空,则有可能引发异常,因此会发出警告。您在哪一行收到该警告?警告并不总是意味着该行中存在问题!redirectsDictionary.ContainsKey(autoRedirect.Key)在autoRedirect.Key下面有一个警告,你在哪一行得到这个警告?警告并不总是意味着该行中存在问题!redirectsDictionary.ContainsKey(autoRedirect.Key)在autoRedirect.Key下有一个警告