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

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

所以你可以使用 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();
于 2013-01-16T15:47:35.270 回答
0

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

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

或 ToArray() 或其他。

于 2013-01-16T15:58:21.423 回答
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:扩展方法 (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[]从结果。

于 2013-01-16T16:16:54.453 回答