在用例下使用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 (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
, B
或C
的情况,因此编译器不知道该返回什么。
通常在函数中有一个单一的退出点会更简洁,所以不要有多个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
代替"魔法"字符串,或者至少使用常量。