在使用案例下使用if语句

时间:2014-06-30 12:51:00

标签: c# if-statement using-statement

这表示需要返回路径,但如果案件有任何办法我无法达成?感谢

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);
        }

    }
}

这表示需要返回路径,但如果案件有任何办法我无法达成?感谢

4 个答案:

答案 0 :(得分:1)

你可以尝试这个:

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>();
}

答案 1 :(得分:0)

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;
}

答案 2 :(得分:0)

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

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

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

这种方法会强制你定义某些东西来返回(即使没有一个语句是真的),所以你永远不应该得到那些类型的编译器错误。

答案 3 :(得分:0)

只是为了澄清:

并非代码中的所有代码路径都返回IEnumerable<RequestCall>。例如,如果我将参数erisim传递给值“X”,该怎么办?这不会通过第1,第2或第3 if条。然后,您的方法退出,而不返回任何内容(这会给您错误消息)。

param erisim

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

正如其他人所说,你需要else来涵盖重新审理的案件。或者只是在方法结束前返回Enumerable.Empty<RequestCall>();

另外,作为建议,如果可能,您可以使用enums而不是“魔术”字符串,或至少使用常量。