【问题标题】:Useless assignment - Sonar warning无用的分配 - 声纳警告
【发布时间】:2020-06-10 07:02:09
【问题描述】:

我有下面一段代码,其中给了我无用分配的警告

Agent agentInfo = new Agent();
if (_userProfile.UserType == Constants.AgentUserType)
    return agentInfo = (from agents in _eAppDataAccess.Agents.FindAll()
        where agents.AgentCode == _agentNumber
        select new Agent
        {
            Address1 = agents.Address1,
            Address2 = agents.Address2,
            PhoneNumber = agents.Phone
        }).FirstOrDefault();
else
    return agentInfo;

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读tourHow to Ask。你究竟从哪里得到这个警告?你试过什么吗?您了解 SonarQube 报告的内容吗?你能向我们解释一下这段代码在做什么,所以我们知道要向你解释什么吗?此外,当_agentNumber 找不到时,您返回null,当_userProfile.UserType != Constants.AgentUserType 时返回new Agent()。这是故意的吗?
  • .FirstOrDefault() 表示您希望有 0、1、2 条或更多记录具有该 _agentNumber。如果您期望完全正确,请使用.Single() 使您的意图更清晰(并在您的假设错误时抛出异常)。如果您希望最多有一个,请使用SingleOrDefault(),但可能没有。

标签: c# sonarqube


【解决方案1】:

您正在分配 Agent agentInfo = new Agent(),而后者在不对 agentInfo 执行任何操作的情况下重新分配它。您可以忽略它并直接在 else 子句中返回 new AgentInfo()。像这样:

if (_userProfile.UserType == Constants.AgentUserType)
    return (from agents in _eAppDataAccess.Agents.FindAll()
        where agents.AgentCode == _agentNumber
        select new Agent
        {
            Address1 = agents.Address1,
            Address2 = agents.Address2,
            PhoneNumber = agents.Phone
        }).FirstOrDefault();
else
    return new Agent();

编辑: CodeCaster 在我忽略的 cmets 中指出了一些问题。当代理的_agentNumber 未找到代理时,您将返回null,当_userProfile.UserType 不是AgentUserType 类型时,您将返回new Agent()。这是故意的吗?

【讨论】:

    【解决方案2】:

    只需删除分配agentInfo变量并直接返回结果。

    return (from agents in _eAppDataAccess.Agents.FindAll()
                                    where agents.AgentCode == _agentNumber
                                    select new Agent
                                    {
                                        Address1 = agents.Address1,
                                        Address2 = agents.Address2,
                                        PhoneNumber = agents.Phone
                                    }).FirstOrDefault();
    

    【讨论】:

    • else 子句呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多