我有2个重载方法,因为参数SecondVar有时可用,有时不可用: -
private void DoSomething(int FirstVar)
{
int SecondVar = 0;
DoSomething(FirstVar, SecondVar);
}
private void DoSomething(int FirstVar, int SecondVar)
{
DoSomething(FirstVar, SecondVar);
if(SecondVar > 0)
{
var a = GetList().Where(x=>x.FirstId == FirstVar && x.SecondId == SecondVar);
}
else
{
var a = GetList().Where(x=>x.FirstId == FirstVar);
}
}
第二个重载的DoSomething是否有可能摆脱If子句?
感谢您的帮助和时间
答案 0 :(得分:6)
private void DoSomething(int FirstVar, int SecondVar)
{
// DoSomething(FirstVar, SecondVar);
var a = GetList().Where(x=>x.FirstId == FirstVar && (SecondVar == 0 || x.SecondId == SecondVar));
}
感谢编辑 - 你是对的 - 操作清楚地说“当第二个var为0然后忽略”。因此,添加一个可选的可空参数只是偏离基础。
答案 1 :(得分:2)
目前你在这里有一个无限循环
private void DoSomething(int FirstVar, int SecondVar)
{
DoSomething(FirstVar, SecondVar);
除此之外,您可以使用Nullable<int>
作为参数,然后您不需要重载:
private void DoSomething(int firstVar, int? secondVar = null)
{
var a = GetList().Where(x=> x.FirstId == firstVar &&
(!secondVar.HasValue || x.SecondId == secondVar.Value));
// ...
}
答案 2 :(得分:1)
它与你的“if”-statement相同,但写的不同(所以也许不是你想要的,但是...... :)):
var a = SecondVar > 0
? GetList().Where(x => x.FirstId == FirstVar && x.SecondId == SecondVar)
: GetList().Where(x => x.FirstId == FirstVar);
答案 3 :(得分:0)
这样的东西?
var a = GetList().Where(x => (SecondVar > 0 && x.FirstId == FirstVar && x.SecondId == SecondVar) || (SecondVar <= 0 && x.FirstId == FirstVar));
答案 4 :(得分:0)
在Where子句中使用Nullable SecondVar
和Coalescing operator
。在这种情况下,如果您未传递SecondVar
,则它将为null,并且SecondVar不会过滤查询。
private void DoSomething(int FirstVar, int? SecondVar = null)
{
var a = GetList()
.Where(x=> x.FirstId == FirstVar &&
x.SecondId == (SecondVar?? x.SecondId));
}
如果你需要按SecondVar进行过滤,如果它只是正数那么;
private void DoSomething(int FirstVar, int SecondVar)
{
var a = GetList()
.Where(x=> x.FirstId == FirstVar &&
x.SecondId == (SecondVar > 0? SecondVar: x.SecondId));
}