2014-09-11 5 views
2

이것은 매우 간단한 질문 일 뿐이지 만 Google은 실망감을 느끼게하고 나를 파이썬 솔루션으로 안내합니다. 나는 다음과 같은 코드를 사용사전의 모든 키를 대문자로 변환하십시오.

IDictionary<string, string> qStrings = HtmlPage.Document.QueryString; 

이 지정된 키의 존재를 확인 :

나는 applciations/사용자가 내가 다음 코드를 사용하여 쿼리 문자열 매개 변수를 검색 .TO querystringparameters를 제공 할 수있는 웹 페이지를

"Param1을", "PARAM1", "PARAM1는"단순히 사전에있는 모든 키를 캐스팅 수있는 방법 가 반복하는 각 키 valuepair없이 대문자를 다음과 같이 사용자를 알고
if (!String.IsNullOrEmpty(qStrings["PARAM1"])) 
{} 

, 내가 parameterkeys을주고 그들을 기다리고있어 ?

또는 어떻게 qStrings["PARAM1"]을 변경하여 케이스를 무시할 수 있습니까?

+2

하지 말라 'String.IsNullOrEmpty이 (qStrings는 [ "PARAM1"])', 충돌 것 PARAM1이 존재하지 않으면. 당신이해야 할 일은''(qStrings.TryGetValue ("PARAM1", out param1)) {...}' – Alxandr

+0

@Alxandr, 덕분에 방금 저에게 많은 지원을 얻었습니다. – User999999

+0

'param1' 'null '이거나 빈 문자열일지도 모르므로,'{...}'내부를 확인하고 싶을 수도 있습니다. – Alxandr

답변

6

당신은 자신의 경우를 무시하고 키를 찾을 수 StringComparer를 사용할 수 있습니다 반복하는없이

var qStrings = new Dictionary<string, string>(
    HtmlPage.Document.QueryString, 
    StringComparer.OrdinalIgnoreCase) 
+0

테스트를 거쳐 작동 확인되었습니다! – User999999

+3

쿼리 문자열에'param1'과'ParAM1'이 둘 다 있으면 실패합니다. 당신은 어떻게 든 그것을 막을 수 있습니다. – Alxandr

+0

@Alxandr, 또 다시 당신은 아주 좋은 지적을합니다. 내 코드 숨김에 대한 수표를 추가했습니다! – User999999

-1

이 불가능합니다. 어떤 접근 방식을 사용하든 반복의 일종이 될 것입니다. 사용자가 모든 종류의 케이스를 입력 할 수 없도록 단일 통합 케이스에 데이터 삽입을 제한해야합니다.

예제 : "Param1", "param1", "pArAm1"을 사용하면 별도의 엔티티로 취급되므로 키 하나가 생성됩니다. 이를 처리하는 가장 좋은 방법은 값을 쿼리하는 것보다 케이스를 삽입에 강제로 넣는 것입니다.

예를 들어 :

void AddToDictionary(string key, string value) 
{ 
    qStrings[key.ToUpper()] = value; 
} 
+0

다른 답변 (http://stackoverflow.com/a/25781046/336648)에서 지적한 것처럼 사전에서 키를 찾을 때 대소 문자를 무시할 수 있습니다. – Kjartan

+0

@ Kjartan하지만 동일한 키를 사용하지만 여러 케이스를 가지고 있기 때문에 문제가 발생할 수 있습니다. –

+0

@RedSerpent : 그냥 확인해보십시오. 케이스가 다르더라도 동일한 키를 두 번 추가 할 때 예외가 발생합니다. 그래서 아무런 문제가 없습니다 :) – User999999

1

은 아마 당신은 아래처럼 작업을 수행 할 수 있습니다!

Dictionary<string, string> qStrings = new Dictionary<string, string>(); 
foreach (var a in qStrings.Keys) 
{ 
    switch (a.ToUpper()) 
    { 
     case "PARAM1": 
      break; 
    } 
} 
+0

귀하의 솔루션은 작동 할 수 있거나 작동해야합니다 (테스트하지 않았습니다).하지만 takemyoxygen 솔루션은 기존 코드와 더 잘 어울립니다 (+1) – User999999

관련 문제