我正在使用以下代码:
var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name"));
我得到的密钥如:name1,name2,name16,name18。
现在我想创建另一个数组,它将删除名称并保留1,2,16,18。在上面的代码本身有没有简单的方法呢?还是分开做?
答案 0 :(得分:6)
你可以直接
ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(a => a.Replace("name",""));
答案 1 :(得分:2)
我认为你的代码足够好了。通过使用子字符串可以提高性能,因为它可以直接删除前缀:
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();
答案 2 :(得分:1)
试试这个:
var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(p => p.Replace("name", ""));
答案 3 :(得分:0)
使用:
var namesWithoutPrefix = names.Select(n => n.Substring(4));
执行Replace
代替Substring
可能会在一个名称中替换多个子字符串(即使它没有这样做也会更慢)。
答案 4 :(得分:0)
我不建议依赖数值的位置或字符串的长度,或者文本根本就是“名字”的事实。相反,您可以使用简单的正则表达式来一致地提取它:
Regex regex = new Regex(@"[0-9]+");
var numbers = ConfigurationManager.AppSettings
.AllKeys.Select(p => regex.Match(p).Value).ToArray();