7

私はこのクラスを持っています

public class ConnectionResult
{
  private int connectionPercentage;

  public int ConnectPercentage
  {
     get { return connectionPercentage; }
  }

  public ConnectionResult(int ip)
  {
     // Check connection and set connectionPercentage
  }
}

そして、ConnectionResultのいくつかのリストを取得し、構成によって決定される特定の数よりも大きい各値をカウントするマネージャーがあります。私の実装はそうです:

public class CurrentConnections
{
  private static CurrentConnections inst;

  private CurrentConnections()
  {

  }

  public static CurrentConnections GetInstance
  {
     get
     {
        if (inst != null)
        {
           inst = new CurrentConnections();
        }
        return inst;
     }
  }

   public int CountActiveConnections(params List<ConnectionResult>[] conns)
   {
     int rtVal = 0;

     foreach (List<ConnectionResult> connectionResult in conns)
     {
        foreach (var currConn in connectionResult)
        {
           if (currConn.ConnectPercentage > ACCEPTABLE_CONNECTION)
           {
              rtVal++;
           }
        }
     }

     return rtVal;
  }
}

しかし、私はそれをより良くしたいので、linqで書き始めました。

conns.Count(x => x.Count(y => y.ConnectPercentage > ACCEPTABLE_CONNECTION));

しかし、これによりエラーが発生しますCannot implicitly convert type 'int' to 'bool'。linqでそれを数える方法はありますか、それとも私が書いたものにとどまる必要がありますか? ところで、私はlinqが初めてです

4

3 に答える 3

6

John Skeetの回答は優れていますが、表示されているエラーに対処するには、クエリは次のようになります。

conns.Sum(x => x.Count(y => y.ConnectPercentage > ACCEPTABLE_CONNECTION));
  • Countboolその基準を満たすコレクションからアイテムの数を返し、返す関数を受け入れます。
  • Sumint(とりわけ)を返す関数を受け入れ、各アイテムに適用された式の結果の合計を返します。

もちろん、各サブセットからすべてのアイテムを選択してカウントアップするか ( John Skeetが示唆するように)、各サブセットからアイテムをカウントしてカウントを合計するか (私のコードが示唆するように)、結果はまさに同じ。

于 2013-07-18T12:59:43.697 に答える