1

我正在使用以下代码:

var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name"));

我得到如下键:name1、name2、name16、name18。

现在我想创建另一个数组,它将删除名称并只保留 1、2、16、18。在上面的代码中是否有任何简单的方法可以做到这一点?还是分开做?

4

5 回答 5

7

你可以直接

ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(a => a.Replace("name",""));
于 2012-09-05T18:25:57.027 回答
2

我认为你的代码已经足够好了。使用 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();
于 2012-09-05T18:53:25.573 回答
1

试试这个:

var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(p => p.Replace("name", ""));
于 2012-09-05T18:26:31.117 回答
0

采用:

var namesWithoutPrefix = names.Select(n => n.Substring(4));

Replace代替Substring可能会替换一个名称中的多个子字符串(即使不这样做也会更慢)。

于 2012-09-05T18:35:25.883 回答
0

我不建议依赖数值的位置或字符串的长度或文本读取“名称”的事实。相反,您可以使用简单的正则表达式来一致地提取它:

Regex regex = new Regex(@"[0-9]+");
var numbers = ConfigurationManager.AppSettings
    .AllKeys.Select(p => regex.Match(p).Value).ToArray();
于 2012-09-05T18:44:08.577 回答