0

次のラムダ式がメソッド呼び出しConvertFilterType(filter.FilterTypeId)を変数に移動して、条件ごとに繰り返し呼び出されないようにする方法はありますか?

この if ステートメントは、コレクションが必要なすべてのフィルターで構成されていることを確認しています。

if (run.Filters.All(
           filter => (ConvertFilterType(filter.FilterTypeId) != FilterType.A)
                  && (ConvertFilterType(filter.FilterTypeId) != FilterType.B)
                  && (ConvertFilterType(filter.FilterTypeId) != FilterType.C)
                  && (ConvertFilterType(filter.FilterTypeId) != FilterType.D)
                  && (ConvertFilterType(filter.FilterTypeId) != FilterType.E)))
    {
       throw new ArgumentException();
    } 
4

5 に答える 5

2

キングの答えは道のりですが、これを行うこともできるようです。

FilterType[] notTheseFilters = new FilterType[] { FilterType.A, FilterType.B...};
bool result = !Filters.Any(f =>
                    notTheseFilters.Contains(ConvertFilterType(f.FilterTypeId)));
于 2013-08-14T12:00:18.843 に答える
0

私の論理が正しければ、これを行うこともできます

var filterTypesToAvoid = new[]{
     FilterType.A,
     FilterType.B,
     FilterType.C,
     FilterType.D,
     FilterType.E
};

if (run.Filters.All(
        filter => !filterTypesToAvoid.Contains(ConvertFilterType(filter.FilterTypeId))
    ))
    {
       throw new ArgumentException();
    } 

この方法では、LINQ クエリに角かっこは必要ありません。

于 2013-08-14T12:03:49.570 に答える