我在c#控制台应用程序中有以下代码,在这里我想检查字符串cleanedphone
是否以字符串列表内的任何条目结尾:
static List<string> Mylist;
var cleanedphone = new string(phone.Trim().Replace(" ", "").Where(c => char.IsDigit(c)).ToArray());//remove non numeric chars + white spaces
si.status = Mylist.Any(a => cleanedphone.EndsWith(a)) ? "Yes" : "No";
但是在我的情况下,即使
Yes
不以cleanedphone
内的任何条目结尾,.Any()也会返回Mylist
。所以有人可以建议吗?谢谢
最佳答案
问题是由列表中的空字符串引起的。如果输入为空字符串,String.EndsWith将为每个字符串返回true
,例如:
"abc".EndsWith("");
返回true。
您必须清理后缀列表,例如:
myList=myList.Where(x=>!String.IsNullOrWhitespace(x)).ToList();
如果您使用存储在静态字段中的正则表达式删除非数字字符,则可以加快并简化代码,例如:
static Regex _cleanup;
static List<string> _suffixes;
static void Initialize(string sourcePath)
{
_cleanup = new Regex("\\D");
_suffixes = File.ReadLines(sourcePath)
.Where(x=>!String.IsNullOrWhitespace(x))
.ToList();
}
public string CheckPhone(string phone)
{
var cleanedphone = _cleanup.Replace(phone,"");
var result = _suffixes.Any(a => cleanedphone.EndsWith(a)) ? "Yes" : "No";
return result;
}
`File.ReadLines` returns an `IEnumerable<string>` instead of `string[]` which means you don't have to load the entire file before cleaning up the entries
关于c# - 在List.Any()内部使用EndsWith()不能按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58629555/