2013-01-16 6 views
1

문자열 배열의 다음 빈 인덱스에 어떻게 문자열을 넣을 수 있습니까? 나는 foreach 루프를 사용하여 모든 부울 문자열이 유효 bools가 있는지 확인하고다음 빈 배열 인덱스에 필드 넣기

string[] invalidKeys; 
foreach (string key in ConfigurationManager.AppSettings) 
{ 
    string value = ConfigurationManager.AppSettings[key]; 
    if (IsValidBooleanString(value) == false) 
    { 
     //Add 'key' to next empty index in the array 'invalidKeys'. 
    } 
return invalidKeys; 
+0

배열 대신'List '을 사용하고 싶습니다. –

+1

'List invalidKeys'를 사용하고'invalidKeys.Add (value);와 함께 객체를 추가 할 것입니다. –

+0

나는 Sandeep에 동의합니다. 'List '을 사용하여 객체를 추가 할 수 있습니다. 문자열을 사용하면 쉽게 반복 할 수 있습니다. foreach가 아닌'for' 루프를 사용하여'int i = 0; '카운터를 구현할 수 있습니다. 그런 다음이 다른 테스트를'if'로 둘러 쌉니다. – plast1K

답변

4

당신은 초기화되지 않은 배열에 잘못된 부울 문자열의 열쇠를 넣을 또는 배열의 길이를 지정 . 당신은 배열 하나를 생성 할 길이를 지정해야하지만 경우에 당신은

그래서 대신

var invalidKeys = new List<String>(); 
foreach (string key in ConfigurationManager.AppSettings.Keys) 
{ 
    string value = ConfigurationManager.AppSettings[key]; 
    if (IsValidBooleanString(value) == false) 
    { 
     //Add 'key' to next empty index in the array 'invalidKeys'. 
     invalidKeys.Add(key); 
    } 
return invalidKeys; 

는 또한 발견 귀하의 foreach 문이 있어야 할 목록을 사용할 수 있습니다 사전에이 정보를 모르는 당신이 정말로 C#을 프로그래머가되고 싶은 경우 ConfigurationManager.AppSettings.Keys하지 ConfigurationManager.AppSettings

에 이 일의

다른 방법은

var invalidKeys = 
ConfigurationManager.AppSettings.Keys 
.Where(k => IsValidBooleanString(ConfigurationManager.AppSettings[k]) == false) 
.ToArray(); 
+0

여전히 배열이 필요한 경우 invalidKeys.ToArray()를 반환하십시오. – proskor

+0

'Link '을 사용하면 어떤 유형의 변수가 반환 될까요? – Spookbuster

+0

변수 유형은 List 입니다. String []이 필요한 경우 @ proskar의 제안 또는 두 번째 옵션을 시도 할 수 있습니다. –

0

될 것입니다 :

return (from string key in ConfigurationManager.AppSettings 
    where !IsValidBooleanString(ConfigurationManager.AppSettings[key]) 
    select key).ToList(); 

또는 ToArray() 또는 무엇이든.

0

IsValidBooleanString()의 기능은 다른 곳에서 유용 할 수 있습니다.

public static class StringExtender 
{ 
    static readonly string[] validBooleanStrings = { "True", "False", "Yes", "No" }; 

    public static bool IsValidBooleanString(this string value) 
    { 
    return ValidBooleanStrings.Contains(value, StringComparer.OrdinalIgnoreCase); 
    } 
} 

일부는 그것이 하나의 메소드에 대한 확장 클래스를 만들 과잉 말할 것입니다,하지만 정말 아니다 그것은 코드의 모듈화 및 재사용한다 : 나는 확장 클래스에 배치 추천 할 것입니다. 비슷한 시나리오를 접할 때 확장 메서드를 추가 할 수 있습니다.

이제 모든 string 개체에는 .IsValidBooleanString() 메서드가 연결되어 있고 자동으로 개체에 (this)을 전달합니다.

var settings = ConfigurationManager.AppSettings; 

// Gets all the keys for values that are invalid boolean strings. 
var invalidKeys = from key in settings.Keys 
        where !settings[key].IsValidBooleanString() 
        select key; 

// If you want a list... 
var invalidKeyList = invalidKeys.ToList<string>(); 

// If you want an array... 
var invalidKeyArray = invalidKeys.ToArray<string>(); 

LINQ 쿼리가 당신이 그것을 줄 것을 기반으로 IEnumerable<> 값을 반환 :

MSDN: Extension Methods (C#)이 잘못 부울 문자열 값을 가진 모든 설정 키의 목록을 불러 오는 경우, 나는 LINQ 쿼리를 사용합니다. 나는 string 유형 (key)에 select을 보내고 있기 때문에 IEnumerable<string>을 돌려 주겠다고 나옵니다. 원하는 경우 결과에서 List<string> 또는 string[]을 만들 수 있습니다.

+0

IsValidBooleanString()과 내가 사용한 메서드를 둘 다 확장 클래스에 넣습니다.그리고 문자열이 유효한 부울 문자열인지 확인하기 위해 'Convert.ToBoolean (s);'을 시도합니다. Convert.ToBoolean()을 사용하여 부울 값으로 변환 할 수 있는지 확인하려면 'System.FormatException'을 catch하면 false를 반환합니다. – Spookbuster