たとえば、 foreach ステートメントを使用して、クラス内の各文字列に対してアクションを実行できますか?
foreach (string s in <class>)
AppSettings で使用できますか?
foreach (string key in ConfigurationManager.AppSettings)
それが不可能な場合、他に同様の方法はありますか?
名前空間System.Reflection
とSystem.Linq
foreach (var pi in typeof(<YourClass>).GetProperties().Where(p => p.PropertyType.Equals(typeof(string))))
{
pi.SetValue(targetObject, value);
}
foreach
IEnumerable
またはを実装するすべてのクラスを反復処理しますIEnumerable<T>
。そうです、クラスIEnumerable
が文字列のコレクションを実装して返すことができる場合は、を使用できますforeach
。
の文字列はプロパティConfigurationManager.AppSettings
ではないことに注意してください。クラスのプロパティを列挙するための組み込みの方法はありません。1つの方法は、特定のタイプ(この例では `string')のプロパティを検索して、クラスのプロパティを反復処理することです。Type.GetProperties
与えられたクラスがまたは(あなたの場合)を実装する場合、それはIEnumerable
可能IEnumerable<T>
です。方法:foreachを使用してコレクションクラスにアクセスする(C#プログラミングガイド)および方法:ジェネリックリストのイテレーターブロックを作成する(C#プログラミングガイド)を参照してください。T
string
foreach
IEnumerable
またはIEnumerable<T>
インターフェイスの実装を繰り返します。したがって、クラスがこれらのインターフェースのいずれかを実装している場合は可能です。
ConfigurationManager.AppSetting
はプロパティです。タイプはNameValueCollection
クラスです。NameObjectCollectionBase
そしてそれはクラスから継承されました。そしてインターフェースをNameObjectCollectionBase
実装しIEnumerable
ます。
これらをチェックしてください。
public class TestClass {
public string String1 { get; set; }
public string String2 { get; set; }
public int Int1 { get; set; }
public TestClass() {
String1 = "Frank";
String2 = "Borland";
foreach (var item in this.GetType().GetProperties().Where(p => p.PropertyType.Equals(typeof(string)))) {
string value = item.GetValue(this, null) as string;
Debug.WriteLine("String: {0} Value: {1}", item.Name, value);
}
}
}
クラス インスタンス文字列の名前と値を出力します。