首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑上处理Null

问逻辑上处理Null
EN

Stack Overflow用户
提问于 2021-01-18 07:23:58
回答 1查看 81关注 0票数 0

在这里,行return session.Dictionary.ContainsKey(SessionId)必须能够返回true和false的值。我知道我在本例中使用的if语句要求所有代码路径都返回值,这对于我创建的处理SessionId是null字符串的函数来说是有问题的,因为如果我返回值true或false,它可能会干扰代码,并允许null值通过。有没有更好的方法来处理异常,或者这种方法可以工作?

代码语言:javascript
复制
private bool sessionExists(string SessionId)
{
   if(!nullExceptionHandler(SessionId)
   {
       return sessionDictionary.ContainsKey(SessionId);
   }
   else
   {
       return 
   }
EN

回答 1

Stack Overflow用户

发布于 2021-01-18 13:27:42

从您的代码逻辑中,您应该返回false,因为如果您不接受null string作为Key,则测试它是否存在必须为false:

代码语言:javascript
复制
if ( !nullExceptionHandler(SessionId) )
{ 
    return sessionDictionary.ContainsKey(SessionId);
}
else
{
    return false;
}

因此,实际上,您不需要这样的方法,只需要集合的包装器的Add方法就可以不接受null。

除此之外,未知的nullExceptionHandler似乎毫无用处。

此外,字典不接受将null作为Key。

也许您想禁止将string.Empty作为Key。

因此,你可以写这样的东西:

代码语言:javascript
复制
public class Sessions
{

  private readonly Dictionary<string, int> Items
    = new Dictionary<string, int>();

  public int Count => Items.Count;

  public bool Exists(string sessionId)
  {
    return Items.ContainsKey(sessionId);
  }

  public void Add(string sessionId, int value)
  {
    if ( sessionId == null )
      throw new System.ArgumentException($"{nameof(sessionId)} = (null)");
    if ( sessionId == string.Empty )
      throw new System.ArgumentException($"{nameof(sessionId)} = \"\"");
    Items.Add(sessionId, value);
  }

  public void Remove(string sessionId)
  {
    if ( Items.ContainsKey(sessionId) )
      Items.Remove(sessionId);
  }

}

我将成员设置为public,以应用于经典的组合包装器情况,但如果您只在类中为专用逻辑内部处理内容,因为您在代码中使用private,所以它是相同的,只有几个变体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65767022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档