将字段放入下一个空数组索引

时间:2013-01-16 15:42:19

标签: c# arrays foreach boolean appsettings

如何将字符串放入字符串数组中的下一个空索引?我想使用foreach循环,看看是否所有布尔字符串都是有效的bool,然后将无效的布尔字符串的键放入数组

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;

3 个答案:

答案 0 :(得分:4)

您尚未初始化或指定数组的长度。您需要指定Array的长度来创建一个,但在您的情况下,您事先不知道该信息

所以你可以使用List而不是

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();

答案 1 :(得分:0)

如果你真的想成为一名C#程序员:

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

或ToArray()或其他。

答案 2 :(得分: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)传递给它。 MSDN: Extension Methods (C#)

对于使用无效的布尔字符串值检索所有设置键的列表,我会使用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类型为string类型(key),因此它知道给我一个IEnumerable<string>。然后,您可以根据需要从结果中创建List<string>string[]