2015-10-16 63 views
1

我已经创建了自己的类型的列表...(自定义类型的类在页面底部)让我喜欢的类型的工作就像一个列表

List<gridRecord> lgr = new List<gridRecord>(); 
lgr = populatedList(); 

我验证与代码波纹管列表中的每个领域...(这工作得很好!)

foreach (gridRecord gr in lgr) 
{ 
    gr.Quantity.validate(); 
    gr.Title.validate(); 
    gr.Pages.validate(); 
    dt.Rows.Add(gr.Title.Value.ToString(), gr.Quantity.Value.ToString(), gr.Pages.Value.ToString()); 
} 

不过,我会加入新gridFields到gridRecord类,并且不希望更改已验证码。

所以......我想能够做这样的事......

foreach (gridField gf in lgr) 
{ 
    gf.Validate(); 
} 

格记录类...

class gridRecord : Validateit 
{ 
    //Constructor 
    public gridRecord() 
    { 
     Quantity = new quantityField(); 
     Title = new titleField(); 
     Pages = new pagesField(); 
    } 
    private quantityField quantity; 
    private titleField title; 
    private pagesField pages; 



    public quantityField Quantity 
    { 
     get { return quantity; } 
     set { quantity = value; } 
    } 

    public titleField Title 
    { 
     get { return title; } 
     set { title = value; } 
    } 

    public pagesField Pages 
    { 
     get { return pages; } 
     set { pages = value; } 
    } 

    public override void Validate() 
    { 

    } 
} 

gridField类...

class gridField : Validateit 
{ 
    public gridField() 
    { 
     Value = "---"; 
     isValid = false; 
     message = ""; 
    } 

    private string value; 
    protected bool isValid; 
    private string message; 


    public string Value 
    { 
     get { return this.value; } 
     set { this.value = value; } 
    } 
    public bool IsValid 
    { 
     get { return isValid; } 
     set { isValid = value; } 
    } 
    public string Message 
    { 
     get { return message; } 
     set { message = value; } 
    } 

    public override void Validate() 
    { 

    } 
} 

我需要使用IEnumerable如果是的话如何?

感谢

+2

你的代码是真的* *难读,因为它是所有格式不正确。无论如何 - 是'Validateit'接口还是基类?它是否定义了“验证”方法? – Jamiec

+0

反映其可能。 http://stackoverflow.com/questions/737151/how-to-get-the-list-of-properties-of-a-class –

+0

我修正了没有正确格式化的类标题。 – user3755946

回答

1

如果你想这样的代码:

foreach (gridRecord gr in lgr) 
{ 
    gr.Validate(); 
} 

这是实现你需要的gridRecord(BTW是Validate方法中的哪一个简单的例子:这个类应该被命名为GridRecord - 班应根据C#命名约定以大写字符开始)

class gridRecord : Validateit 
{ 
    //.. snip 
    public override void Validate() 
    { 
     this.Quantity.Validate(); 
     this.Title.Validate(); 
     this.Pages.Validate(); 
    } 
} 

但是,如果您要枚举所有字段可以使每个gridRecord实现IEnumerable<gridField>这样的:

class gridRecord : Validateit, IEnumerable<gridField> 
{ 
    //.. snip 
    public IEnumerator<gridField> GetEnumerator() 
    { 
     yield return Quantity; 
     yield return Title; 
     yield return Pages; 
    } 

    public IEnumerator GetEnumerator() 
    { 
     return GetEnumerator(); // generic version 
    } 
} 

然后你就可以有这样的代码:

foreach (gridRecord gr in lgr) // enumerate each record 
{ 
    foreach(gridField gf in gr) // enumerate each field within each record 
    { 
     gf.Validate(); 
    } 
}