如何添加这样的类,以便我可以预先循环?

时间:2010-11-12 21:22:23

标签: c# c#-4.0

我希望能够在一个简单的类中循环遍历所有字符串,即执行以下操作:

FormDebugMetrics debugMetrics = new FormDebugMetrics();
foreach(string d in debugMetrics)
    {
        if (!string.IsNullOrEmpty(d) {..}
    }

我的班级是这样的(没有'GetEnumerator'的公开定义:

 public class FormDebugMetrics
    {
        public string DebugMetrics_Top { get; set; }
        public string DebugMetrics_Bottom { get; set; }
        public string DebugMetrics_Bottom { get; set; }
    }

如何做到这一点?我是否以某种方式添加了一个枚举器?

3 个答案:

答案 0 :(得分:3)

这是一种方式:

public class FormDebugMetrics : IEnumerable<string> {
    // details elided

    public string DebugMetrics_Top { get; set; }
    public string DebugMetrics_Middle { get; set; }
    public string DebugMetrics_Bottom { get; set; }

    public IEnumerator<string> GetEnumerator() {
        yield return this.DebugMetrics_Top;
        yield return this.DebugMetrics_Middle;
        yield return this.DebugMetrics_Bottom;
    }

    IEnumerator IEnumerator.GetEnumerator() {
        return GetEnumerator();
    }
}

那就是说,我质疑你的设计。没有更多的背景,目前还不清楚它是否合适。

答案 1 :(得分:1)

您需要使用反射或采用不同的方法。我会考虑使用Dictionary而不是使用反射。

答案 2 :(得分:0)

它不能。至少不是简单的方式。您可以添加GetEnumerator方法或将其包装在另一个知道如何执行此操作的类中。

您也可以通过Reflection或C#4.0动态功能执行此操作,但我真的会提醒您。