2013-03-05 2 views
1

배열의 특정 셀에 주어진 문자열의 일부가 포함되어 있는지 확인하려고합니다. 배열은 .Contains를 사용하지 않기 때문에 나는 .Any를 사용하고 있지만 어떻게 이해할 수 있습니다. 모든 작업을 제대로하기에는 너무 흐립니다. 그래서 난 등 "돼지 고기", "농장"와 같은 문자열에 공급하고 있습니다 배열에서 System.Linq의 .Any를 사용하여 문자열 찾기

public void ProcessCSV (string typeName) { 

    for (int y = 0; y < CSVReader.grid.GetUpperBound(1); y++) { 
     if (CSVReader.grid[0,y] != null) { 
      if ((CSVReader.grid[0,y].Any(s => typeName.Contains(s)))) { 
        // (add it to a new list) 

은 때때로, 완벽 예를 작동하는 것 같다 typeName이 "Farm"인 경우 [0, y]에 해당 문자열을 포함하는 배열의 행만 가져옵니다. 그러나 다른 시간에, 내가 다른 문자열이나 임의의 횡설수설을 사용한다면, 문자열을 가진 모든 단일 행을 반환합니다.

내가 전화를 걸면 실제로 무슨 일이 벌어 지나요? 이런 식 으로요? 사용할 수있는 대체 방법이 있습니까?

답변

4

아마도 잘못 된 것일 수 있습니다.

Any이 시퀀스의 요소가 조건을 충족하는지 여부를 나타내는 부울을 반환합니다. Any(s => ...)을 입력하면 s은 확인 된 시퀀스의 요소입니다.

그래서 당신은 입력 할 때 :

.Any(s => typeName.Contains(s)) 

... 당신은 본질적으로 요구하고있다 :

문자열 typeName에 포함 된 순서에서 어떤 요소 인가? typeNamePork 경우

예를 들어, Any()"Pork".Contains("ork")true를 반환합니다.

.Any(s => s.Contains(typeName)) 

어떤 요소가 문자열 typeName이 포함되어 있습니까 : 당신은 아마 주변의 다른 방법을 의미?

따라서 "Pork and beef".Contains("Pork")true을 반환합니다. 당신이이 조건을 충족 순서에서 (대신 부울 진리)을 요소를 원하는 경우에 당신은 항상 적어도 하나가 알고


, 당신은 First을 사용할 수 있습니다, FirstOrDefault를 사용 (또는 대신). 예를 들어

.FirstOrDefault(s => typeName.Contains(s)) 

복귀 typeName 문자열에 포함되는 시퀀스로부터 제 소자; 또는없는 경우 기본값입니다.

또는 주변 (나는 아직도 당신이 의미가 생각하는) 다른 방법 :

.FirstOrDefault(s => s.Contains(typeName)) 

돌아 문자열 typeName을 포함하는 순서에서 첫 번째 요소; 또는없는 경우 기본값입니다.

+0

어, 예! 그건 분명 했어야했다;) 그러나 그런 식으로 바꾸면 나에게 다시 오류가 발생한다. 포함한다 - 아마도 내가 사용할 수 없기 때문이다. 배열을 포함하고 배열은 배열의 일부인가? 이 주변에 좋은 방법이 있습니까? –

+0

내가 얻는 두 가지 오류 중 하나는 다음과 같습니다. "유형'char '에 멤버'Contains '와 최상의 확장 메서드 오버로드가 없습니다. System.Linq.Enumerable.Contains (this System.Collections.Generic.IEnumerable , string) '잘못된 인수가 있습니다. " –

+0

@ChrisMorrison 그러면 오류를 더 자세히 읽어야합니다. 'char' (한 문자)에'Contains'를 호출하려고합니다. 당신은 분명히'CSVReader.grid [0, y]'가 문자열을 반환 할 것으로 기대하고 있습니다. 그러나 이것은 항상 그렇습니다. 단일'char' 또는 문자 배열을 문자열로 바꾸려면 ['String' 생성자] (http://msdn.microsoft.com/en-us/library/ttyxaek9.aspx)를 사용하십시오. – Virtlink

관련 문제