使用foreach为类中定义的每个字段(相同类型)执行操作
本文关键字:字段 同类型 操作 执行 foreach 定义 使用 | 更新日期: 2023-09-27 17:53:49
例如,是否可以使用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
中的字符串不是属性。并没有内置的方法来枚举类的属性。一种方法是使用Type.GetProperties
迭代类属性,查找给定类型的任何属性(示例中为"string"(。
如果给定的类实现IEnumerable
或IEnumerable<T>
(在您的情况下,T
是string
(,则这是可能的。请参阅如何:使用foreach访问集合类(C#编程指南(和如何:为泛型列表创建迭代程序块(C#编程手册(
foreach
迭代IEnumerable
或IEnumerable<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);
}
}
}
打印出类实例字符串的名称和值。