1

我有一个自定义对象,每个属性都有不同的数据类型。我希望能够做类似的事情:

    public void evalCI(configurationItem CI)
     {
    foreach (PropertyInformation n in CI)
       {
        Response.Write(n.Name.ToString() + ": " + n.Value.ToString() + "</br>");
       }
     }

我的自定义对象是:

public class configurationItem : IEnumerable

{
    private string serial;
    private string model;
    private DateTime? wstart;
    private DateTime? wend;
    private Int32 daysLeft;
    private string platform;
    private string productVersion;
    private string manufacturer;
    private bool verificationFlag;        

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

    public string Serial
    {
        set { serial = value; }
        get { return serial; }
    }
    public string Model
    {
        set { model = value; }
        get { return model; }
    }
    public DateTime? Wstart
    {
        set { wstart = value; }
        get { return wstart; }
    }
    public DateTime? Wend
    {
        set { wend = value; }
        get { return wend; }
    }
    public Int32 DaysLeft
    {
        set { daysLeft = value; }
        get { return daysLeft; }
    }
    public string Platform
    {
        set { platform = value; }
        get { return platform; }
    }
    public string ProductVersion
    {
        set { productVersion = value; }
        get { return productVersion; }
    }
    public string Manufacturer
    {
        set { manufacturer = value; }
        get { return manufacturer; }
    }
    public bool VerificationFlag
    {
        set { verificationFlag = value; }
        get { return verificationFlag; }
    }

我的预期输出是:

-序列号:1234567

-型号:野马

-W开始:2005 年 12 月 12 日

-温:2006 年 12 月 11 日

-剩余天数:0

-平台:汽车

-产品版本:GT

-制造商:福特

-验证标志:真

起初我收到一个错误,必须实现 GetEnumerator() 才能使用 foreach 循环。我一直遇到的问题是索引属性的所有示例都是具有可索引列表的单个属性,而不是对象中每个属性的索引。通过添加以下内容,我能够获得智能感知来为 PropertyInfo 提供方法:

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

但是,第二个 GetEnumerator() 抛出:编译器错误消息:CS0103:当前上下文中不存在名称“GetEnumerator”。

我在这里想念什么?如何修改我的对象以提供我期望从 evalCI() 获得的结果?

4

1 回答 1

2

您不需要实现 IEnumerable。您需要做的是使用反射。

这是来自记忆,但我相信它看起来像这样:

   foreach (PropertyInfo n in typeof(configurationItem).GetProperties())
   {
     Response.Write(string.Format("{0}:  {1}<br/>", n.Name, n.GetValue(CI, null)));
   }

这 - 编写的代码 - 也只会为您提供公共属性和非索引属性(但看起来您没有任何索引属性)。

于 2012-11-13T21:43:41.310 回答