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

本文关键字:数组 索引 下一个 字段 | 更新日期: 2023-09-27 17:53:33

如何将字符串放到字符串数组中的下一个空索引中?我想使用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;

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

您没有初始化或指定数组的长度。您需要指定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();

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

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

或者ToArray()等等

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<>值。因为我是selectstring类型(key),它知道给我一个IEnumerable<string>。然后,如果您愿意,可以从结果中创建List<string>string[]