Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表达总是真实和多余的吗?_C#_Resharper - Fatal编程技术网

C# 表达总是真实和多余的吗?

C# 表达总是真实和多余的吗?,c#,resharper,C#,Resharper,我有下面的方法,Resharper告诉我,if(drivers!=null)总是正确的,但是我不知道为什么,它告诉我,catch块是多余的,但是有人能解释为什么吗?代码如下: public List<Driver> GetDrivers(int id) { if (_context != null) { try { v

我有下面的方法,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;
        }
公共列表GetDrivers(int-id)
{
如果(_context!=null)
{
尝试
{
var drivers=_context.drivers.Where(x=>x.id==id.ToList();
//永远正确
if(驱动程序!=null)
{
//代码
}
其他的
{
//试探不可及
抛出新异常(“无驱动程序”);
}
}
捕获(例外情况除外)
{
投掷;
}
}
返回司机;
}
  • 为什么
    if(drivers!=null)
    总是true?驱动程序不能为空吗?如果它是正确的,我假设驱动程序有一个非空的默认值
  • 我假设它告诉我们else语句是不可访问的,因为它认为driver永远不能为null,但这是真的吗
  • 它告诉我,
    catch
    是冗余的,但是除了为null之外,这 resharper说不能,难道没有其他例外吗 抛出将导致执行
    捕获的

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


    我想您应该使用.SingleOrDefault而不是.Where.

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


    我想您应该使用.SingleOrDefault而不是.Where.

    捕获实际上是多余的,您没有在其中做任何事情,只需重新抛出完全相同的异常:

    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;
    }
    
    此外,它从不返回null,它可以有0个条目,但不会为null:

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

    捕获是多余的,实际上,您没有在其中做任何事情,只是重新抛出完全相同的异常:

    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;
    }
    
    此外,它从不返回null,它可以有0个条目,但不会为null:

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

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


    。其中
    返回一个集合。它永远不会为null,但可能为空。

    try块是多余的,因为您只是再次抛出错误,而没有进行任何其他处理。如果删除
    try/catch
    ,无论如何都会出现异常。你不需要扔它


    。其中
    返回一个集合。它永远不会为空,但可能为空。

    所以,我想我可以检查驱动程序。计数,对吗?为什么当我悬停在何处时,它会说它可以抛出一个异常?它是在谈论Where子句中的参数还是Where返回什么?是的,在这种情况下,您可以检查drivers.Count。然而,我喜欢明确我的意图,所以在本例中,我将使用返回布尔值的.Any。我认为这将是最有效的。如果我使用SingleOrDefault而不是Where,会有什么不同?好的,不要太关注这些东西的效率。谢谢你们的Any指针。我喜欢明确我的期望,所以我会这样编码。所以yes=>“我只知道这个驱动程序只有一个实例”,所以,我想我可以检查驱动程序。计数,对吗?为什么当我悬停在何处时,它会说它可以抛出一个异常?它是在谈论Where子句中的参数还是Where返回什么?是的,在这种情况下,您可以检查drivers.Count。然而,我喜欢明确我的意图,所以在本例中,我将使用返回布尔值的.Any。我认为这将是最有效的。如果我使用SingleOrDefault而不是Where,会有什么不同?好的,不要太关注这些东西的效率。谢谢你们的Any指针。我喜欢明确我的期望,所以我会这样编码。所以yes=>“我只希望这个驱动程序只有一个实例”好的,如果我添加日志记录,它就不再是多余的了?好的,如果我添加日志记录,它就不再是多余的了?我计划添加日志记录,所以我想它不会是多余的。是的,完全是这样,那么它就很有意义了。我计划添加日志记录,所以我想这不会是多余的。是的,完全是这样,这是完全有道理的。