2012-09-19 53 views
-4

我有一個包含下列項目列表:爲什麼列表項爲零?

捆綁/發行/ US --- NL
捆綁/發行/ UK ---美國

我想搜索的字符串(」美國「或」英國「)。

var testVar = (from r in ghh 
    where (r.Substring(r.LastIndexOf('/') + 1, 
         (r.Length - (r.IndexOf("---") + 3)))) == "US" 
    select r).ToList(); 

if (testVar != null) 
{ 
    //print item is present 
} 

ghh是列表名稱)

testVar總是顯示null。爲什麼?

+1

有了這樣的問題,只需調試以找出什麼不工作/有預期的價值。 – keyser

+0

@Keyser我們可以調試lambda表達式嗎? – Prateek

+0

@Prateek你可以調試執行的東西。所以是的,你可以。 – keyser

回答

1

嘗試另一種方式:

testVar.Where(x => { 
    var country = x.Split('/').Last() 
       .Split(new[] { "---" }, StringSplitOptions.RemoveEmptyEntries) 
       .First(); 

    return country == "US" || country == "UK"; 
}).ToList(); 
+0

謝謝Cuong Le。我試過它的工作。 – Prateek

1

爲什麼不直接使用(假設列表只是字符串的列表):

var items = (from r in ghh where r.Contains("UK") || r.Contains("US") select r).ToList(); 
+0

謝謝米克。包含方法不確定,是否正確? – Prateek

1

沒有什麼情況,其中testVarnull

下面是一些代碼來說明這一點。一定要激活運行前的輸出視圖... 視圖 - >輸出

的是,LINQ查詢在以後執行可能發生的唯一的事,你會得到一個空的例外,因爲你的GHH是在點空的linq試圖查詢它。 Linq並不一定立即執行。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Diagnostics; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      CallAsExpected(); 
      CallWithNull(); 
      CallNoHits(); 
      Console.WriteLine("Look at Debug Output"); 
      Console.ReadKey(); 
     } 

     private static void CallNoHits() 
     { 
      TryCall(new List<string> { 
       "UK foo", 
       "DE bar" 
      }); 
     } 

     private static void CallWithNull() 
     { 
      TryCall(null); 
     } 

     private static void CallAsExpected() 
     { 
      TryCall(new List<string> { 
       "US woohooo", 
       "UK foo", 
       "DE bar", 
       "US second", 
       "US third" 
      }); 
     } 

     private static void TryCall(List<String> ghh) 
     { 
      try 
      { 
       TestMethod(ghh); 
      } 
      catch (Exception e) 
      { 
       Debug.WriteLine(e); 
      } 
     } 

     private static void TestMethod(List<String> ghh) 
     { 
      if (ghh == null) Debug.WriteLine("ghh was null"); 

      var testVar = (from r in ghh 
          where (r.Contains("US")) 
          select r); 

      Debug.WriteLine(String.Format("Items Found: {0}", testVar.Count())); 

      if (testVar == null) Debug.WriteLine("testVar was null"); 

      foreach (String item in testVar) 
      { 
       Debug.WriteLine(item); 
      } 
     } 
    } 
}