0

我有以下代码行,这给我带来了 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,上面的东西在我看来并不好看。我怎样才能以更好的方式写这个?

4

3 回答 3

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 你会怎么做?真的可以继续吗?

于 2012-12-11T10:24:13.300 回答
1
  1. !=手段not equal to==手段equal to

  2. 如果你不能使用NULL你可以使用""

用逻辑应用条件,然后即使它没有得到你想要的东西:

  1. 条件将是false并且您还使用AND了逻辑运算符
于 2012-12-11T10:30:44.847 回答
0

我会使用这个(仅供参考,我没有在编译器中尝试过):

 if (ConfigurationManager.GetSection("Servers")?.Get(ment) is NameValueCollection nvc)
                        {
                            ServeUrl = nvc;
                        }
于 2020-08-14T15:09:51.280 回答