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

あなたのコードは十分だと思います。プレフィックスを削除するのは簡単な操作であるため、サブストリングを使用すると、パフォーマンスが少し向上します。

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

数値の位置や文字列の長さ、またはテキストが 'name' であるという事実に依存することはお勧めしません。代わりに、単純な正規表現を使用して一貫して抽出できます。

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

使用する:

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

Replace代わりに行うSubstringと、1 つの名前の複数の部分文字列が置き換えられる可能性があります (そうしない場合でも遅くなります)。

于 2012-09-05T18:35:25.883 に答える