【问题标题】:remove this useless assignment to local variable c#删除这个对局部变量 c# 的无用赋值
【发布时间】:2018-06-02 20:18:53
【问题描述】:
var  stopFyon = new StopFYON();
IEnumerable<CarOnline> carOnlineData = (IEnumerable<CarOnline>)vehrep.GetCarOnlineDetail(maintainStopFactoryOrderNo.VehicleDetail).Result;

if (carOnlineData.Any())
{
    stopFyon = vehtran.CreateStopFactoryOrderNo(carOnlineData, maintainStopFactoryOrderNo, lastUpdatedBy);
}
else
{
    stopFyon = vehtran.CreateStopFactoryOrderNo(null, maintainStopFactoryOrderNo, lastUpdatedBy);
}
return gen.GetResponse((Int16)ResultCode.Success, (Int16)MsgType.Ok, null, vehrep.StopFactoryOrderNo(stopFyon));

使用声纳代码分析时出现警告错误:

去掉这个对局部变量stopFyon的无用赋值

【问题讨论】:

  • StopFYON stopFyon;?你不需要分配一个新的实例,因为在 if/else 中你总是给它分配一个新的值来覆盖它。
  • 那么我怎样才能为此创建一个全局变量呢?
  • @RameshRajendran 看看第一条评论
  • 如果你给它一个预期类型的​​值,就不要使用var。或 StopFYON 继承的父类/接口类型,您可以在任何地方声明它,而无需使用var

标签: c# lint sonarlint


【解决方案1】:

只需使用StopFYON stopFyon; 分配类型,无需初始化,因为您的 if 条件块正在分配实际值。

【讨论】:

    【解决方案2】:

    信息非常简单:

    IEnumerable<CarOnline> carOnlineData = (IEnumerable<CarOnline>)vehrep.GetCarOnlineDetail(maintainStopFactoryOrderNo.VehicleDetail).Result;
    
    StopFYON stopFyon;
    
    if (carOnlineData.Any())
        stopFyon = vehtran.CreateStopFactoryOrderNo(carOnlineData, maintainStopFactoryOrderNo, lastUpdatedBy);
    else
        stopFyon = vehtran.CreateStopFactoryOrderNo(null, maintainStopFactoryOrderNo, lastUpdatedBy);
    

    第一个作业:

    var stopFyon = new StopFYON();
    

    没有用,因为在 if statement 之后执行了另一个分配。

    【讨论】:

    • 但是为什么在给StopFYON stopFyon = null时它没有显示错误??这也是一个无用的任务
    • 因为你用null初始化你的变量。一个null 的赋值并不昂贵;相反,使用构造函数的赋值可能很昂贵。
    【解决方案3】:

    不要使用var:

    StopFYON stopFyon;
    

    警告的原因是您使用默认构造函数初始化变量(理论上这可能是一个非常昂贵的调用,至少它令人困惑)。但是这个赋值在所有分支(ifelse)中都会被覆盖。所以没用。

    如果您在if 之前使用stopFyon,警告也会消失。

    【讨论】:

    • 但是为什么在给StopFYON stopFyon = null时没有显示错误??这也是一个无用的任务。
    • @RameshRajendran:你是对的。但这不花钱。您不会创建不使用的实例。警告不是关于未分配的变量,而是关于无用的实例。它想保护你免受粗心的错误。
    【解决方案4】:

    当我更改代码 StopFYON stopFyon = null 而不是 var stopFyon = new StopFYON(); 时,它正在工作

    【讨论】:

    • = Null 认为您不需要该部分,因为它应该默认为空。 StopFYON stopFyon; 应该足够了。
    • @Dragonvil 。是的!那比我好。但是不知道为什么在给StopFYON stopFyon = null时它没有显示错误??这也是没用的任务?
    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 2018-10-18
    • 2014-04-22
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2011-05-05
    • 2013-08-02
    相关资源
    最近更新 更多