1

我有 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 子句?

感谢您的帮助和时间

4

5 回答 5

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 时忽略”。因此,添加一个可选的可为空参数只是离题了。

于 2013-05-31T13:48:30.350 回答
2

目前你在这里有一个无限循环

private void DoSomething(int FirstVar, int SecondVar)
{
    DoSomething(FirstVar, SecondVar);

除此之外,您可以使用Nullable<int>as 参数,然后您不需要重载:

private void DoSomething(int firstVar, int? secondVar = null)
{
    var a = GetList().Where(x=> x.FirstId == firstVar &&
      (!secondVar.HasValue ||  x.SecondId == secondVar.Value));
    // ...
}
于 2013-05-31T13:51:08.090 回答
1

它与您的“if”语句相同,但写法不同(所以可能不是您要查找的内容,但是... :)):

var a = SecondVar > 0
                        ? GetList().Where(x => x.FirstId == FirstVar && x.SecondId == SecondVar)
                        : GetList().Where(x => x.FirstId == FirstVar);
于 2013-05-31T13:55:42.623 回答
0

像这样的东西?

var a = GetList().Where(x => (SecondVar > 0 && x.FirstId == FirstVar && x.SecondId == SecondVar) || (SecondVar <= 0 && x.FirstId == FirstVar));
于 2013-05-31T13:49:41.323 回答
0

在 Where 子句中使用Nullable SecondVarand 。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));
}
于 2013-05-31T13:56:40.083 回答