我有一个包含以下项目的列表:
捆绑/释放/ US --- NL
捆绑/发布/英国---美国
我想在列表项中搜索子字符串(“US”或“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
。为什么呢?
答案 0 :(得分:1)
为什么不使用(假设列表只是一个字符串列表):
var items = (from r in ghh where r.Contains("UK") || r.Contains("US") select r).ToList();
答案 1 :(得分:1)
尝试另一种方式:
testVar.Where(x => {
var country = x.Split('/').Last()
.Split(new[] { "---" }, StringSplitOptions.RemoveEmptyEntries)
.First();
return country == "US" || country == "UK";
}).ToList();
答案 2 :(得分:1)
在任何情况下testVar
都不会null
。
以下是一些代码来说明这一点。在运行之前一定要激活输出视图... 查看 - >输出
唯一可能发生的事情是linq查询稍后执行,你得到一个null异常,因为你的ghh在linq试图查询它时为null。 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);
}
}
}
}