我有以下代码行,这给我带来了NPE的麻烦
ServeUrl = ((NameValueCollection)ConfigurationManager.GetSection("Servers")).Get(ment);
当我以下列方式写这篇文章时,我不再获得NPE
if (ConfigurationManager.GetSection("Servers") != null && ((NameValueCollection)ConfigurationManager.GetSection("Servers")).Get(ment) != null)
{
ServeUrl = ((NameValueCollection)ConfigurationManager.GetSection("Servers")).Get(ment);
}
Somwhow,上面的东西对我的眼睛看起来不太好。我怎样才能以更好的方式写出来?
答案 0 :(得分:5)
我将提取一个临时变量:
var section = (NameValueCollection)ConfigurationManager.GetSection("Servers");
if (section != null && section.Get(ment) != null)
{
...
}
甚至:
var section = (NameValueCollection)ConfigurationManager.GetSection("Servers");
if (section != null)
{
var url = section.Get(ment);
if (url != null)
{
ServeUrl = url;
}
}
如果GetSection
返回null,您想要做什么?你能实际继续吗?
答案 1 :(得分:1)
!=
表示not equal to
,==
表示equal to
如果您无法使用NULL
,可以使用""
使用逻辑应用条件,然后即使它没有得到你想要的那样:
false
,您还使用了AND
逻辑运算符答案 2 :(得分:0)
我会用这个(仅供参考,我没有在编译器中尝试过):
if (ConfigurationManager.GetSection("Servers")?.Get(ment) is NameValueCollection nvc)
{
ServeUrl = nvc;
}