2016-12-11 8 views
0

このようなコードを書くことは可能ですが、ユーザー例外フィルタを繰り返すことはありません。繰り返し例外フィルタよりも良い方法はありますか?

var exceptionList = new List<string> { 
    "QPZ", 
    "QPR" 
}; 

foreach (var val in users) 
{ 
    if (val.Any(x => exceptionList.Contains(x.UserException)) 
    { 
     listUsers.Add(
      val?.First(s => exceptionList.Contains(x.UserException)) 
     ); 
    } 
    else 
    { 
     listUsers.AddRange(val); 
    } 
} 

答えて

3

あなたはFirstOrDefault(filter) + nullチェックしてAny(filter) + First(filter)を交換することにより、重複するフィルタを避ける(ともパフォーマンスを向上させる)ことができます。

foreach (var val in users) 
{ 
    if (val.Any(x => x.UserException.Contains("QPZ") || x.UserException.Contains("QPR"))) 
    { 
     listUsers.Add(
     val?.First(s => s.UserException.Contains("QPZ") || 
         s.UserException.Contains("QPR"))); 
    } 
    else 
    { 
     listUsers.AddRange(val); 
    } 
} 
0

あなたは例外のリストを使用し、そのに対してチェックできます。

foreach (var val in users) 
{ 
    var match = val.FirstOrDefault(x => 
     x.UserException.Contains("QPZ") || x.UserException.Contains("QPR")); 
    if (match != null) 
    { 
     listUsers.Add(match); 
    } 
    else 
    { 
     listUsers.AddRange(val); 
    } 
} 
0

IvanとJanRのおかげで、私の質問に対する答えが見つかりました、ありがとうございます!

var exceptionList = new List<string> {"QPZ","QPR"}; 

foreach (var val in users) 
{ 

var match = val.FirstOrDefault(x => exceptionList.Contains(x.UserException)); 

    if (match != null) 
    { 
     usersList.Add(match); 
    } 
    else 
    { 
     usersList.AddRange(val); 
    } 
} 
関連する問題