0

たとえば、 foreach ステートメントを使用して、クラス内の各文字列に対してアクションを実行できますか?

foreach (string s in <class>)

AppSettings で使用できますか?

foreach (string key in ConfigurationManager.AppSettings)

それが不可能な場合、他に同様の方法はありますか?

4

5 に答える 5

2

名前空間System.ReflectionSystem.Linq

foreach (var pi in typeof(<YourClass>).GetProperties().Where(p => p.PropertyType.Equals(typeof(string))))
{
    pi.SetValue(targetObject, value);
}
于 2013-01-15T19:01:23.897 に答える
1

foreachIEnumerableまたはを実装するすべてのクラスを反復処理しますIEnumerable<T>。そうです、クラスIEnumerableが文字列のコレクションを実装して返すことができる場合は、を使用できますforeach

の文字列はプロパティConfigurationManager.AppSettingsではないことに注意してください。クラスのプロパティを列挙するための組み込みの方法はありません。1つの方法は、特定のタイプ(この例では `string')のプロパティを検索して、クラスのプロパティを反復処理することです。Type.GetProperties

于 2013-01-15T18:53:51.987 に答える
1

与えられたクラスがまたは(あなたの場合)を実装する場合、それはIEnumerable可能IEnumerable<T>です。方法:foreachを使用してコレクションクラスにアクセスする(C#プログラミングガイド)および方法:ジェネリックリストのイテレーターブロックを作成する(C#プログラミングガイド)を参照してください。Tstring

于 2013-01-15T18:54:13.377 に答える
1

foreachIEnumerableまたはIEnumerable<T>インターフェイスの実装を繰り返します。したがって、クラスがこれらのインターフェースのいずれかを実装している場合は可能です。

ConfigurationManager.AppSettingはプロパティです。タイプはNameValueCollectionクラスです。NameObjectCollectionBaseそしてそれはクラスから継承されました。そしてインターフェースをNameObjectCollectionBase実装しIEnumerableます。

これらをチェックしてください。

于 2013-01-15T18:55:34.620 に答える
0
   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);
            }
        }
    }

クラス インスタンス文字列の名前と値を出力します。

于 2013-01-15T19:15:07.953 に答える