使用LiNQ查看c#中的数组是否存在“值”

时间:2017-08-30 22:04:48

标签: c# linq

我有以下

string[] statelookup = ConfigurationManager.AppSettings["WstmStateLookUp"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

带有这些值

“AL,AR,CT,MD,DE,FL,GA,IA,IL,IN,KY,LA,MA,ME,MI,MN,MO,MS,NC,NH,NJ,NY,OH, PA,RI,SC,TN,VA,VT,WI,WV“

我需要查看文件中的任何行是否包含上述值之一。这个

是一个样本行
<FIPS>20170<STATE>AL<WFO>AJK

当我使用以下内容时,我只获得statelookup中第一项(在本例中为AL)的结果。

statelookup.Any(a => currentLine.Contains("<STATE>"+a))

我可以移动项目(比如首先输入OH并获取OH结果)但我似乎无法返回包含任何statelookup值的文件中的所有行。

我必须使用

"<STATE"+a 

因为AL,AK和RI可以出现在文件的其他行中。这样我只会查找这个特定的实例。

我缺少什么?

2 个答案:

答案 0 :(得分:2)

问题是你的数组不包含你认为它的作用...如果你在逗号上分割"AL, AR, CT",那么你得到{"AL"," AR"," CT"}。正如您所看到的,除了第一个条目之外的每个条目都有一个前导空格,导致您的匹配不起作用。

您拥有的三个选项是存储不带空格的字符串,拆分为“,”或更好地在拆分之后使用Trim方法去除空格,然后再将它们放入数组中。最后一个是我的首选,因为如果由于某种原因你有两个或三个空格(或更多),它会起作用。

这样的事情会起作用:

string[] statelookup = ConfigurationManager.AppSettings["WstmStateLookUp"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x=>x.Trim()).ToArray();

答案 1 :(得分:0)

如评论中@ user1304444所述,您正在错误地拆分数组。我在这里制作了代码的工作版本:

https://dotnetfiddle.net/pFO6iV

您会注意到可以找到状态AL,因为没有前面的空格,因此它在字符串数组中变为"AL"

我已使用string.Replace()删除了空格,但您可以通过多种方式执行此操作。

string[] statelookup ConfigurationManager
    .AppSettings["WstmStateLookUp"]
    .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);