表达式总是正确和多余的
本文关键字:多余 表达式 | 更新日期: 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;
}
- 为什么
if(drivers != null)
总是正确的?司机不能是空的吗?如果它是正确的,我假设驱动程序有一个不为空的默认值。 - 我假设它告诉else语句是不可达的,因为它认为驱动程序永远不能为空,但情况是这样吗?
- 它告诉我
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
返回一个集合。它永远不会是空的,但它可能是空的。