我正在使用以下代码:
var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name"));
我得到如下键:name1、name2、name16、name18。
现在我想创建另一个数组,它将删除名称并只保留 1、2、16、18。在上面的代码中是否有任何简单的方法可以做到这一点?还是分开做?
我正在使用以下代码:
var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name"));
我得到如下键:name1、name2、name16、name18。
现在我想创建另一个数组,它将删除名称并只保留 1、2、16、18。在上面的代码中是否有任何简单的方法可以做到这一点?还是分开做?
你可以直接
ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(a => a.Replace("name",""));
我认为你的代码已经足够好了。使用 substring 可以提高一点性能,因为它是删除前缀的简单操作:
var prefix = "name"; // could be a parameter or used as const; just for example
var nums = ConfigurationManager.AppSettings.AllKeys.Where(s => s.StartsWith(prefix)).Select(s => s.Substring(prefix.Length)).ToArray();
试试这个:
var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(p => p.Replace("name", ""));
采用:
var namesWithoutPrefix = names.Select(n => n.Substring(4));
Replace
代替Substring
可能会替换一个名称中的多个子字符串(即使不这样做也会更慢)。
我不建议依赖数值的位置或字符串的长度或文本读取“名称”的事实。相反,您可以使用简单的正则表达式来一致地提取它:
Regex regex = new Regex(@"[0-9]+");
var numbers = ConfigurationManager.AppSettings
.AllKeys.Select(p => regex.Match(p).Value).ToArray();