2012-02-29 15 views
2

我々は助けを必要と...私はちょうど下のではなく、作業をしてみました以下のコード行をどのように改善できますか?

if ((l_Subscription.PackageInfo.Applications.Where(x => x.DeviceType != DeviceType.UnKnown)).Count() > 0) 
     { 
      //l_Subscription.DeviceTypeID = ((l_Subscription.PackageInfo.Applications.Where(x => x.DeviceType == DeviceType.Tablet)).Count() > 0)?() 
      if ((l_Subscription.PackageInfo.Applications.Where(x => x.DeviceType == DeviceType.Tablet)).Count() > 0) 
       l_Subscription.DeviceTypeID = (int)DeviceType.Tablet; 
      else if ((l_Subscription.PackageInfo.Applications.Where(x => x.DeviceType == DeviceType.Phone)).Count() > 0) 
       l_Subscription.DeviceTypeID = (int)DeviceType.Phone; 
     } 

のコード行を向上させることができます

int cnt = DoOperation(l_Subscription.PackageInfo.Applications, x => x.DeviceType != DeviceType.UnKnown); 
     if(cnt > 0) 
     { 
      int cnt1 = DoOperation(l_Subscription.PackageInfo.Applications, x => x.DeviceType == DeviceType.Tablet); 
      int cnt2 = DoOperation(l_Subscription.PackageInfo.Applications, x => x.DeviceType == DeviceType.Phone); 

      if(cnt1 > 0) l_Subscription.DeviceTypeID = (int)DeviceType.Tablet; 
      else if (cnt2 > 0) l_Subscription.DeviceTypeID = (int)DeviceType.Phone;   
     } 

     private int DoOperation<TKey>(List<l_Subscription.PackageInfo.Applications> list, Func<l_Subscription.PackageInfo.Applications, TKey> predicate) 
     {   
      int count = 0; 
      count = list.Where(predicate).Count(); 
      return count; 
     } 
+0

私は8行を1つではなく数えます。あなたはそれについて何を "改善"したいですか? – Oded

+0

もっと良い方法を書いて – user1025901

答えて

6

.Where(predicate).Count() > 0 
を交換する一つの簡単な改善は次のようになります

.Any(predicate) 

ああ、それはすべてあなたのコードであれば条件ならば条件とそれ以外の内側の場合、内側の両方のためには条件があなたを与え、外側を意味するものでは場合、場合、あなたは外を削除することができます

if ((l_Subscription.PackageInfo.Applications.Any(x => x.DeviceType == DeviceType.Tablet)) 
    l_Subscription.DeviceTypeID = (int)DeviceType.Tablet; 
else if ((l_Subscription.PackageInfo.Applications.Any(x => x.DeviceType == DeviceType.Phone)) 
    l_Subscription.DeviceTypeID = (int)DeviceType.Phone; 
+0

私はちょうど試みたが、正しく動作していないもので質問を更新しました...助けが必要です..あなたが私を助けることができれば感謝します – user1025901

0

IFアプリケーションのコレクションは常に(同じコレクションに錠剤及び携帯電話の両方のないミックスを意味しない)のみの単一DeviceTypeをが含まれていますその後、上記に短縮することができます。もちろん

l_Subscription.DeviceTypeID = l_Subscription.PackageInfo.Applications.First(x => x.DeviceType == DeviceType.Tablet || x.DeviceType == DeviceType.Phone); 

だけあなたはそれがあるかどうかを知りますyについて合理的な仮定私たちのシナリオ...

関連する問題