表达式总是正确和多余的

本文关键字:多余 表达式 | 更新日期: 2023-09-27 18:14:02

我有以下方法和Resharper告诉我if(drivers != null)将始终为真,但我不知道为什么,它告诉我catch块是冗余的,但有人能解释为什么吗?下面是代码:

public List<Driver> GetDrivers(int id)
        {
            if (_context != null)
            {
                try
                {
                    var drivers = _context.Drivers.Where(x=> x.id == id).ToList();

                    //Always true
                    if (drivers != null)
                    {
                        //code
                    }
                    else
                    {
                        //Heuristically unreachable
                        throw new Exception("No Driver");
                    }
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
            return drivers;
        }
  1. 为什么if(drivers != null)总是正确的?司机不能是空的吗?如果它是正确的,我假设驱动程序有一个不为空的默认值。
  2. 我假设它告诉else语句是不可达的,因为它认为驱动程序永远不能为空,但情况是这样吗?
  3. 它告诉我catch是冗余的,但除了为空,其中Resharper说不能,难道没有其他例外吗会导致catch执行吗?

表达式总是正确和多余的

您正在使用. where,它返回一个集合。如果没有匹配,它将是一个空集合,因此不是null。

我想你应该使用。singleordefault而不是。where .

这个catch确实是多余的,你没有做任何事情,只是重新抛出完全相同的异常:

catch (Exception ex)
{
   // would make more sense if for example you're writing to log file
   // otherwise this will be thrown anyway (even without the catch)
   throw;
}

同样,this永远不会返回null,它可以有0个条目,但它不会为null:

_context.Drivers.Where(x=> x.id == id).ToList();

try块是多余的,因为您只是再次抛出错误,而不做任何额外的处理。如果你删除try/catch,异常无论如何都会冒出来。你不需要把它扔了。

.Where返回一个集合。它永远不会是空的,但它可能是空的。