2010-08-31 84 views
0

我想通过使用Contains函数比较两个字符串来增加计数。 我的代码,包含asp.net中的函数

int count = 0; 
string strSize = ""; 
for (int i = 0; i < dts.Rows.Count; i++) 
    { 
    strSize += dts.Rows[i]["sizeid"].ToString() + ","; 
    } 


if (strSize.Length > 0) 
    strSize = strSize.Substring(0, strSize.Length - 1); 
// After executing strSize="3,4,5,10" 

if (strMainSize.Length > 0) 
    strMainSize = strMainSize.Substring(0, strMainSize.Length - 1); 
// After executing strMainSize ="1,2,3,4,5,10,45" 

    strM = strMainSize.Split(','); 


for (int s = 0; s < strM.Length; s++) 
    { 
     if (strSize.Contains(strM[s])) 
     { 
      count++; 
      chkSize.Items.FindByValue(strM[s]).Selected = true; 
     } 
    } 
var totalCount = count; 

执行在此之后,TOTALCOUNT应该等于4但它给我5,是指当它被用于strSize.Contains检查条件(STRM [S])它是获得第一次真实而不是错误。 有人可以告诉我为什么会发生这种情况。

其他的事情,当我在其他应用程序中做同样的工作正常。

代码我写是,

int count=0; 
     string[] str = { "3", "4", "5", "10"}; 
     string[] strM = {"1","2","3","4","5","10","45","50" }; 
     for (int s = 0; s < strM.Length; s++) 
     { 

      var stM = strM[s]; 
      if (str.Contains(strM[s])) 
      { 
       count++; 
       chkSize.Items.FindByValue(strM[s]).Selected = true; 
      } 
     } 

     int totalCount = count; 

这里O/P:TOTALCOUNT = 4。 任何人都可以告诉我两者之间的区别。

回答

0

strSize.Contains(strM[s])返回true 1中,由于1包含在字符串3,4,5,10

0

不同的是,第一码查找一个子串,而第二代码进行比较整个字符串。

表达式"3,4,5,10".Contains("1")返回true。

0

好吧,这里是处理,第一个代码的strSize只是一个简单的字符串,第二个代码的strSize是一个字符串数组。

所以当你说包含第一个代码时,它会查看整个字符串并检查你是否在找那里,因此“3,4,5,10”包含1,而且如果你尝试strSize.indexof(“10”)在它会给你的第一个代码6.另一方面,如果你尝试str.ToList()。IndexOf(“10)第二个代码它会给你3.或者,如果你使用“1”,第一个代码仍然会返回6,但第二个代码将返回-1,因为它没有在数组中找到元素“1”。

0

是的,因为Guffa说你正在搜索一个字符串,所以如果该字符串包含你substring它返回true你应该使用你的第二个方法或固定你的代码这样的事情

 
for (int s = 0; s < strM.Length; s++) 
    { 
     stirng searchStr = strM[s]+',';
if (strSize.Contains(searchStr)) { count++; chkSize.Items.FindByValue(strM[s]).Selected = true; } }

对于此代码正常工作,如果您的代码只是为此目的而写的,则不应从strSize中删除最后的','。