有人可以向我解释为什么代码的顶部有效,但当测试是一个数组时,它不会
string test = "Customer - ";
if (test.Contains("Customer"))
{
test = "a";
}
以下代码无效
string[]test = { "Customer - " };
if (test.Contains("Customer"))
{
test[0]= "a";
}
答案 0 :(得分:8)
在第一种情况下,您调用String.Contains
来检查字符串是否包含子字符串
因此,此条件返回true
。
在第二种情况下,您在string[]
上调用Enumerable.Contains
,它会检查字符串数组是否包含特定值。
由于您的集合中没有"Customer"
字符串,因此会返回false
。
这两个类似的被称为但实际上是不同类型的不同方法。
如果要检查集合中的任何字符串是否包含" Customer"作为子字符串,您可以使用LINQ .Any()
:
if (test.Any(s => s.Contains("Customer"))
{
test[1] = "a";
}
答案 1 :(得分:2)
第一个代码段在另一个字符串Customer
内搜索字符串Customer -
,该字符串在第二个代码段字符串Customer
中有效但在其中一个字符串Customer -
内搜索。因此第二个返回false。
从声明测试
的方式可以看出这一点string test = "Customer - ";
OR
string[] test = { "Customer - " };
注意大括号。这就是你如何定义一个集合(这里是数组)
要制作第二段代码,您应该
string[] test = { "Customer - " };
if (test.Any(x => x.Contains("Customer")))
{
test[1] = "a";
}
答案 2 :(得分:1)
因为在第二种情况下,当您在字符串数组中搜索第一个字符串时,if条件为false。您可以使用任何关键字搜索与客户匹配的数组中的任何字符串,或者您可以搜索test [0]以搜索数组中的第一个字符串(如果它与客户匹配):
if (test[0].Contains("Customer"))
{
//your rest of the code here
}
if (test.Any(x => x.Contains("Customer")))
{
//your rest of the code here
}
答案 3 :(得分:1)
string test = "Customer - ";
if (test.Contains("Customer"))
{
test = "a";
}
在此Contains中是一个String类方法,它是IEnumerable检查的基础
“客户 - ”有客户。
但是
string[]test = { "Customer - " };
if (test.Contains("Customer"))
{
test[1]= "a";
}
在这个Place Contains是一个IEnumerable方法,它是IEnumerable checks的基础。所以,它不起作用你改变代码
string[] test = { "Customer - " };
if (test.Any(x => x.Contains("Customer")))
{
}
test [1] =“a”抛出异常,因为,数组位置从0开始而不是1