【发布时间】:2020-04-25 06:46:10
【问题描述】:
我在列表和数组或字典上看到了 IEnumerator 的示例(和官方示例),但我有一个不同的问题。我有带属性的类,在这种情况下如何实现 IEnumerable 和 IEnumerator?
我的属性类是:
public class standardMessage
{
public messageProperties message { get; set; }
public messageFlag flag { get; set; }
}
public class messageProperties
{
public string messageSubject { get; set; }
public string messageBody { get; set; }
}
public class messageFlag
{
public Boolean flagImportant { get; set; }
public Boolean flagPersonal { get; set; }
}
这就是程序:
public class Program
{
static void Main(string[] args)
{
standardMessage myMessage = new standardMessage();
myMessage.message = new messageProperties
{
messageSubject = "Greetings",
messageBody = "Happy Weekend"
};
myMessage.flag = new messageFlag
{
flagImportant = false,
flagPersonal = true
};
//how do I iterate through all properties, without knowing how many are there, instead of writing this worm line of code?
Console.WriteLine(myMessage.message.messageSubject.ToString() + "\r\n" + myMessage.message.messageBody.ToString() + "\r\n" + myMessage.flag.flagImportant.ToString() + "\r\n" + myMessage.flag.flagPersonal.ToString());
Console.ReadLine();
}
}
【问题讨论】:
-
在这种情况下,您可能只想覆盖类的
ToString方法。 -
使用反射可以获得所有类属性的 IEnumerable。然后,您可以遍历属性以获取嵌套在其中的任何属性,就像遍历任何其他树结构一样。
-
@Pavel Anikhouski 感谢您指出其他解决方案;但是,它没有实现 IEnumerable(尽管属性是单例,但我一直在寻找 List 解决方案,但无论如何),更重要的是,当我实现时,我发现它不返回“子”属性。例如,对于我们这里的问题,我希望不仅“看到”“消息”和“标志”,而且“看到”“消息”中的“消息主题”和“消息正文”——对于“标志重要”和“标志个人”也是如此在标准消息的“标志”内。
标签: c# properties ienumerable ienumerator