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

foreach将遍历任何实现IEnumerable或的类IEnumerable<T>。所以是的,如果你的类实现IEnumerable并且可以返回一个字符串集合,那么你可以使用foreach.

请记住,其中的字符串ConfigurationManager.AppSettings不是属性。没有内置的方法来枚举类的属性。Type.GetProperties一种方法是使用查找给定类型的任何属性(在您的示例中为“字符串”)来迭代类属性。

于 2013-01-15T18:53:51.987 回答
1

如果给定的类实现IEnumerableIEnumerable<T>(在您的情况下)T是可能的。string请参阅如何:使用 foreach 访问集合类(C# 编程指南)如何:为通用列表创建迭代器块(C# 编程指南)

于 2013-01-15T18:54:13.377 回答
1

foreach迭代任何实现IEnumerableIEnumerable<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 回答