使用foreach为类中定义的每个字段(相同类型)执行操作

本文关键字:字段 同类型 操作 执行 foreach 定义 使用 | 更新日期: 2023-09-27 17:53:49

例如,是否可以使用foreach语句为类中的每个字符串执行操作?

foreach (string s in <class>)

就像我可以在AppSettings中使用它一样?

foreach (string key in ConfigurationManager.AppSettings)

如果不可能,还有其他类似的方法吗?

使用foreach为类中定义的每个字段(相同类型)执行操作

您可以使用名称空间System.ReflectionSystem.Linq

foreach (var pi in typeof(<YourClass>).GetProperties().Where(p => p.PropertyType.Equals(typeof(string))))
{
    pi.SetValue(targetObject, value);
}

foreach将迭代实现IEnumerableIEnumerable<T>的任何类。所以,是的,如果您的类实现了IEnumerable并且可以返回一个字符串集合,那么您就可以使用foreach

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

如果给定的类实现IEnumerableIEnumerable<T>(在您的情况下,Tstring(,则这是可能的。请参阅如何:使用foreach访问集合类(C#编程指南(和如何:为泛型列表创建迭代程序块(C#编程手册(

foreach迭代IEnumerableIEnumerable<T>接口的任何实现。因此,如果您的类实现了其中一个接口,这是可能的。

ConfigurationManager.AppSetting是一个性质。它的值类型是NameValueCollection类。它继承了CCD_ 19类。NameObjectCollectionBase实现了IEnumerable接口。

看看这些;

  • 当值已知时,如何从应用程序设置文件中读取密钥
  • 通过配置管理器从AppSettings中获取StringCollection
  • 如何使C#类在foreach语句中可用
   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);
            }
        }
    }

打印出类实例字符串的名称和值。

相关文章: