1

文字列配列の次の空のインデックスに文字列を配置するにはどうすればよいですか? foreach ループを使用して、すべてのブール値文字列が有効なブール値であるかどうかを確認し、無効なブール値文字列のキーを配列に入れたい

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;
4

3 に答える 3

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 は ConfigurationManager.AppSettings.Keys ではなく ConfigurationManager.AppSettings にある必要があります。

これを行う他の方法は

var invalidKeys = 
ConfigurationManager.AppSettings.Keys
.Where(k => IsValidBooleanString(ConfigurationManager.AppSettings[k]) == false)
.ToArray();
于 2013-01-16T15:47:35.270 に答える
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()渡されます。MSDN: 拡張メソッド (C#)this

無効なブール文字列値を持つすべての設定キーのリストを取得するには、次のLINQクエリを使用します。

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<>した内容に基づいて値を返します。私は型 ( ) をselect扱っているので、 を返すことを知っています。必要に応じて、結果からまたはを作成できます。stringkeyIEnumerable<string>List<string>string[]

于 2013-01-16T16:16:54.453 に答える
0

本当に C# プログラマーになりたい場合:

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

または ToArray() など。

于 2013-01-16T15:58:21.423 に答える