这段代码有什么问题?
bool claimExists;
string currentClaimControlNo = "700209308399870";
List<string> claimControlNo = new List<string>();
claimControlNo.Add("700209308399870");
if (claimControlNo.Contains(currentClaimControlNo.Substring(0, 14)))
claimExists = true;
else
claimExists = false;
为什么上面的claimControlNo变得虚假? 由于我知道该值存在,我如何调整代码?
答案 0 :(得分:4)
报告错误是因为您没有询问列表是否包含currentClaimControlNo
,而是询问它是否包含一个字符串,该字符串是十五个字符的字符串currentClaimControlNo
中的前十四个字符。
请改为尝试:
claimExists = claimControlNo.Any(ccn => ccn.StartsWith(currentClaimControlNo.Substring(0,14)));
答案 1 :(得分:2)
你的计数错了。有15个字符。您的子字符串正在切断最后一个0,这会使条件失败。
答案 2 :(得分:2)
因为列表中的contains查找整个项目,而不是子字符串:
currentClaimControlNo.Substring(0, 14)
"70020930839987"
与
不一样 700209308399870
您缺少一个数字,因此列表搜索失败的原因。
我认为您正试图在列表中找到包含该子字符串的内容。不要使用列表包含方法。如果您尝试在列表中找到具有子集的内容,请执行此操作
claimExists = claimControlNo.Any(item => item.Contains(currentClaimControlNo.Substring(0, 14)))
这将遍历claimControlNo
中的每个项目,然后每个项目都可以检查它是否包含子字符串。
为什么这样?字符串
上的Contains
方法
返回一个值,该值指示指定的System.String对象是否出现在此字符串中。
这就是你想要的。
Contains
列表,但
确定元素是否在System.Collections.Generic.List。
中
他们不一样,因此你的困惑
答案 3 :(得分:2)
你真的需要这个解释吗?
当字符串的长度为15时,您正在为Substring
调用14个字符。然后您要检查您的列表(只有一个长度为15的项目)是否包含长度为14的项目。它没有; t事件需要检查值,长度足以确定它不匹配。
解决方案当然是不做Substring
,这没有意义。
看起来像这样:
if (claimControlNo.Contains(currentClaimControlNo))
claimExists = true;
else
claimExists = false;
然后,也许你知道你正在修剪搜索,并且实际上正在寻找列表中部分匹配的任何东西?
如果是这种情况,那么您只需循环列表并对每个项目执行Contains
。像这样:
bool claimExists = false;
string searchString = currentClaimControlNo.Substring(0, 14);
foreach(var s in claimControlNo)
{
if(s.Contains(searchString))
{
claimExists = true;
break;
}
}
或使用一些稍微复杂(当然更复杂然后我记得我的头顶)LINQ查询。快速猜测(这可能是公平的,我非常棒):
bool claimExists = claimControlNo.Any(x => x.Contains(searchString));
答案 4 :(得分:2)
因为您正在削减子字符串中的最后一位数字。
如果你改变了行
if (claimControlNo.Contains(currentClaimControlNo.Substring(0, 14)))
到
if (claimControlNo.Contains(currentClaimControlNo.Substring(0, 15)))
它有效。
答案 5 :(得分:1)
检查:
// str will be equal to 70020930839987
var str = currentClaimControlNo.Substring(0, 14);
List<string> claimControlNo = new List<string>();
claimControlNo.Add("700209308399870");
值str不包含在列表中。