例如,是否可以使用 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
一种方法是使用查找给定类型的任何属性(在您的示例中为“字符串”)来迭代类属性。
如果给定的类实现IEnumerable
或IEnumerable<T>
(在您的情况下)T
是可能的。string
请参阅如何:使用 foreach 访问集合类(C# 编程指南)和如何:为通用列表创建迭代器块(C# 编程指南)
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);
}
}
}
打印出类实例字符串的名称和值。