1

私は以下のコードを持っています - リストを入力パラメータの1つとして取る一般的なメソッド。メソッド内には、一般的な LINQ 呼び出しに実行される IF/ELSEIF ステートメントがあります。LINQ 呼び出しがすべての IF/ELSEIF に共通するように、私を助けてください。

private Boolean filterList<T>(List<T> anyOutdoorSports, int numberOfPartcipants)
{
    if (anyOutdoorSports == null){ return false ;}
    Boolean _returnValue = false;

    if (anyOutdoorSports.GetType() == typeof(List<Swimming>))
    {
        List<Swimming> Swimming = anyOutdoorSports.Cast<Swimming>().ToList();

        if (Swimming.Count > 0)
        {
            int listCount = (from rca in Swimming
                             where (rca.RecordFields[numberOfPartcipants].ToString()).StartsWith("stamina")
                             select rca).Count();
            _returnValue = listCount > 0 ? true : false;
        }
    }
    else if (anyOutdoorSports.GetType() == typeof(List<Tennis>))
    {
        List<Tennis> Tennis = anyOutdoorSports.Cast<Tennis>().ToList();

        if (Tennis.Count > 0)
        {
            int listCount = (from rca in Tennis
                             where (rca.RecordFields[numberOfPartcipants].ToString()).StartsWith("stamina")
                             select rca).Count();
            _returnValue = listCount > 0 ? true : false;
        }
    }
    else if (anyOutdoorSports.GetType() == typeof(List<Soccer>))
    {
        List<Soccer> Soccer = anyOutdoorSports.Cast<Soccer>().ToList();

        if (Soccer.Count > 0)
        {
            int listCount = (from rca in Soccer
                             where (rca.RecordFields[numberOfPartcipants].ToString()).StartsWith("stamina")
                             select rca).Count();
            _returnValue = listCount > 0 ? true : false;
        }
    }

    return _returnValue;
}

閲覧して助けてくれたすべての人に感謝します。

4

3 に答える 3

2

Tennisに共通の基本クラスがSoccerありSwimmingRecordFieldsプロパティがある場合、これは簡単です。

private boolean FilterList<T>(IEnumerable<T> anyOutdoorSports, int numberOfParticipants) where T : OutdoorSport
{
    if(anyOutdoorSports == null) return false;
    return anyOutdoorSports.Any(s => s.RecordFields[numberOfParticipants].ToString().StartsWith("stamina"));
}
于 2012-06-18T18:13:49.990 に答える
0

すべてのクラスが を含む同じ基本クラスから継承すると仮定すると、メソッドに一般的な制約を作成し、 を完全RecordFieldsに削除できます。ifs

private Boolean filterList<T>(List<T> anyOutdoorSports, int numberOfPartcipants)
  where T : OutdoorSport
{
    if (anyOutdoorSports == null){ return false ;}
    Boolean _returnValue = false;

    if (anyOutdoorSports.Count > 0)
    {
        int listCount = (from rca in anyOutdoorSports
                         where (rca.RecordFields[numberOfPartcipants].ToString()).StartsWith("stamina")
                         select rca).Count();
        _returnValue = listCount > 0;
    }

    return _returnValue;
}
于 2012-06-18T18:13:35.587 に答える
0

すべてのタイプに RecordFields プロパティがあるように見えるため、インターフェイスを追加して、ジェネリックの代わりにそれを使用できます。

それ以外は、 Func<> 式に頼る必要があります。

于 2012-06-18T18:11:27.817 に答える