在用例下使用if语句

本文关键字:if 语句 | 更新日期: 2023-09-27 18:11:00

这说需要返回路径,但我不能达到,如果有任何方法?由于

public IEnumerable<RequestCall> GetRequests(string erisim, string sube, string sicil)
{
    using (var redisclient = RedisManager.GetClient())
    {
        var redisUser = redisclient.As<RequestCall>();
        if (erisim == "A")
        {
            return redisUser.GetAll();// .Where(c=>c.Sube=="Y");
        }
        else if (erisim == "P")
        {
            return redisUser.GetAll().Where(c => c.Sube == sube);
        }
        else if (erisim == "C")
        {
            return redisUser.GetAll().Where(c => c.CagriAcan == sicil);
        }
    }
}

这说需要返回路径,但我无法达到,如果有任何方法?由于

在用例下使用if语句

你可以试试这个:

if (erisim == "A")
{
    return redisUser.GetAll();// .Where(c=>c.Sube=="Y");
}
else if (erisim == "P")
{
    return redisUser.GetAll().Where(c => c.Sube == sube);
}
else if (erisim == "C")
{
    return redisUser.GetAll().Where(c => c.CagriAcan == sicil);
}
else
{
    return Enumerable.Empty<RequestCall>();
}

Sudhakar Tillapudi,绝对正确,你需要添加聋哑条款:

using (var redisclient = RedisManager.GetClient())
{
    var redisUser = redisclient.As<RequestCall>();
    if (erisim == "A")
    {
        return redisUser.GetAll();// .Where(c=>c.Sube=="Y");
    }
    else if (erisim == "P")
    {
        return redisUser.GetAll().Where(c => c.Sube == sube);
    }
    else if (erisim == "C")
    {
        return redisUser.GetAll().Where(c => c.CagriAcan == sicil);
    }
    else return null;
}

问题是你没有考虑到erisim不等于A, BC的情况,因此编译器不知道该返回什么。

通常在函数中有一个单一的退出点会更简洁,所以不要有多个return语句,而要有一个单一的返回,例如

var result = null;
if (erisim == "A") 
{
    result = ...;
} 
else if (erisim == "P") 
{
    result = ...;
} 
else if (erisim == "C") 
{
    result = ...;
}
return result;

这种方法将迫使您定义返回的东西(即使没有语句为真),所以您应该永远不会得到这些类型的编译器错误。

说明一下:

不是所有的代码路径都返回IEnumerable<RequestCall>。例如,如果我将值"X"传递给参数erisim,会发生什么?这不会通过第一,第二或第三if语句。然后,你的方法退出,不返回任何东西(这会给你错误消息)。

参数erisim:

   -> "A" -> return something
   -> "P" -> return something
   -> "C" -> return something
   -> Anything else -> (this part is missing!)

正如其他人所说,您需要else来覆盖其余的情况。或者在方法结束前返回Enumerable.Empty<RequestCall>();

另外,作为一个忠告,如果可能的话,您可以使用enums代替"魔法"字符串,或者至少使用常量。