public class Zone
{
public string zoneID { get; set; }
public string zoneName { get; set; }
public string zonePID { get; set; }
}
Я хочу использовать foreach для Zone, например
var zone = new Zone(){zoneId = "001", zoneName = "test"};
foreach(var field in zone)
{
string filedName = field.Key; //for example : "zoneId"
string filedValue = filed.value; //for example : "001"
}
Я просто не знаю, как реализовать GetEnumerator()
в классе Zone
Вы не можете перечислять свойства класса (простым способом)
Используйте строковый массив или список строк или словарь внутри вашего класса.
Примечание. Действительно, можно перечислять свойства класса с помощью Reflection, но это не так, как в вашем случае.
Спасибо, эвейрон! Кажется, мне нужно использовать рефлексию для достижения цели.
System.Reflection.PropertyInfo[] pis = zone.GetType().GetProperties();
foreach (var prop in pis)
{
if (prop.PropertyType.Equals(typeof(string)))
{
string key = prop.Name;
string value = (string)prop.GetValue(zome, null);
dict.Add(key, value); //the type of dict is Dictionary<str,str>
}
}
Просто не знаю, это хорошее решение.
foreach(var field in zone)
{
string filedName = field.zoneID; //Id of property from Zone Class
string filedValue = filed.zoneName ; //name of property from Zone Class
}
Вы можете оснастить Zone
этим методом:
public Dictionary<string, string> AsDictionary()
{
return new Dictionary<string, string>
{
{ "zoneID", zoneID },
{ "zoneName", zoneName },
{ "zonePid", zonePid },
};
}
Тогда вы можете это foreach
.
Кроме того, вы можете реализовать GetEnumerator()
как блок итератора, где вы yield return
три new KeyValuePair<string, string>
.
Я не говорю, что этот дизайн особенно рекомендуется.
IEnumerable<KeyValuePair<string, string>>
без особых проблем (используя рефлексию), но я скептически отношусь к тому, что это был бы хороший способ решить любую вашу большую проблему. Одной из распространенных альтернатив для вашего класса является использование словаря для поддержки имен полей и значений, а затем их перечисление тривиально (поскольку именно это и производит словарь при перечислении). Но в вопросе недостаточно информации, чтобы понять, каков правильный ответ.