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