私は次のコードを使用しています:
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",""));
あなたのコードは十分だと思います。プレフィックスを削除するのは簡単な操作であるため、サブストリングを使用すると、パフォーマンスが少し向上します。
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", ""));
数値の位置や文字列の長さ、またはテキストが 'name' であるという事実に依存することはお勧めしません。代わりに、単純な正規表現を使用して一貫して抽出できます。
Regex regex = new Regex(@"[0-9]+");
var numbers = ConfigurationManager.AppSettings
.AllKeys.Select(p => regex.Match(p).Value).ToArray();
使用する:
var namesWithoutPrefix = names.Select(n => n.Substring(4));
Replace
代わりに行うSubstring
と、1 つの名前の複数の部分文字列が置き換えられる可能性があります (そうしない場合でも遅くなります)。