2011-12-04 3 views
0

C#에서 반환 값에 문제가 있지만, 텍스트가 존재하는 경우에도이 "0"으로 값을 반환 할 때마다 :나는이 함수에서 컨트롤의 발생을 확인하려고

private int FindOccurenceCheckbox(string substr) 
{ 

    string reqstr = Request.Form.ToString(); 
    substr = "CheckBoxdll"; 
    return ((reqstr.Length - reqstr.Replace(substr, "").Length)/substr.Length); 
} 

이의 값입니다 reqstr :

"_ 의 EventTarget = ddlcontrols & _EVENTARGUMENT = & _ LASTFOCUS = & _VIEWSTA TE = % 2fwEPDwUKLTIyNjcyOTI5MA9kFgICAw9kFgICAQ8QZGQWAQIBZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUNQ2hlY2tCb3hkbGwtMZACzpLykGbncLmfD8JMOBwmVx5N & __EVENTVALIDATION = % 2fwEWCwKztfT0BALBjeFfAuPA7qsFAs3fv6cLAuuY2OwBApPqidAEApyFo74IAp2Fo74IAp6Fo74IAr7h3OcDAr % 2fmspEDoBBLBtCm1eeskKSim6Nd20 % 2bdpso % 3D & ddlcontrols = 드롭 다운 & ddlDynamic-1 = & txtDynamic-1 = & CheckBoxdll-1 = "

이 하나가 나를 도울 수에? 이것이 항상 "0" 값을 반환하는 이유는 무엇입니까?

+0

왜 메소드에'substr' 인수가 있습니까? 메소드 내부에서''CheckBoxdll ''로 설정했습니다! – comecme

+1

예제에서 1을 반환합니다. 그 값을 포함하는 reqstr을 (디버깅하는 동안) 실제로 보았습니까?내가 게시 한 값에'string reqstr'을 할당하여 코드를 실행 시켰고, 메소드는'1'을 예상대로 리턴합니다. – comecme

답변

1

integer division을 (를) 수행하고 있습니다. (reqstr.Length - reqstr.Replace(substr, "").Length) 값이 substr.Length 값보다 작은 경우 항상 0을 반환합니다. 나누기가 정수가 아니더라도 메서드의 반환 값이 int이므로 결과가 잘립니다.

업데이트 : reqstrsubstr 변수는 질문를 제공하는 값이있는 경우

이 답변이 문제 하지 않을 것이라고 정수 나누기를 알리는 주석의 숫자가 모여있다 (부문은 여전히 ​​정수 것 그러나 0 대신 양의 정수를 반환합니다. 이것은 확실히 사실입니다. 그러나 또한 0을받는 경우 그 결과는 또한 division의 결과가 0이기 때문입니다.

따라서 사실로 제공되는 질문 중 일부는 사실이 아닙니다 (예 : 두 문자열의 내용).

+3

'(reqstr.Length - reqstr.Replace (substr, "") .Length)의 값은'substr.Length'의 배수가되지 않습니다. – dtb

+0

@dtb : 나를 이깁니다. 나는'reqstr' 또는'substr'의 값이 질문이 말하는 것과 다르다고 추측 할 수 있습니다. 코드는 다른 설명을 허용하기에는 너무 단순 해 보입니다. – Jon

+0

@downvoter : 의견을 남겨 주시면이 답변을 개선 할 수 있도록 도와주세요. – Jon

1

좋은 생각. 나는 당신의 코드를 돌렸고 키에 1을 리턴하고 존재하지 않는다면 0을 돌려주는 것으로 보인다.

Request.Form에있는 키의 존재를 확인하는 것이 당신의 유일한 관심사 인 경우 더 간결하고 흥미로운 방식으로 수행 할 수 있습니다. 이 시도 :

private bool FindOccurenceCheckbox(string substr) 
{ 
    return Request.Form.AllKeys.Contains(substr); 
} 

UPDATE

이리듐 CheckBoxdll-*의 수를 계산하는 점을 확인한다. LINQ로 업데이트를 알려줍니다.

private int FindOccurenceCheckbox(string substr) 
{ 
    return Request.Form.AllKeys.Count(p=>p.StartsWith(substr)); 
} 
+0

원본 코드의 목적은 그것이 나타나는 지 아닌지 아닌 출현 횟수를 결정하는 것이라고 생각합니다. – Iridium

+0

은'Request.Form'에 여러 항목을 가질 수 없습니다 –

+0

예제 양식 데이터에 "CheckBoxdll-1"이 포함되어 있지만 "CheckBoxdll"에 대한 검색이라는 점에 유의하십시오. 아마도 "CheckBoxdll-2", "CheckBoxdll-3"등이있을 수 있으며 목표는 몇 개가 있는지 확인하는 것입니다. – Iridium

관련 문제