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

-モデル: ムスタング

-開始: 2005 年 12 月 12 日

-水曜日: 2006 年 12 月 11 日

-残り日数: 0

-プラットフォーム: 車

-製品バージョン: GT

・メーカー:フォード

-VerificationFlag: true

最初は、foreach ループを使用するには GetEnumerator() を実装する必要があるというエラーが発生しました。私がよく遭遇する問題は、インデックス付きプロパティのすべての例が、オブジェクト内の各プロパティのインデックスではなく、インデックス可能なリストを持つ単一のプロパティのものであることです。以下を追加することで、Intellisense に PropertyInfo のメソッドを提供することができました。

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

ただし、2 番目の 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 に答える