EE_Kraig
EE_Kraig

Reputation: 93

Enumerate custom object values with foreach

I have read several posts and just can't seem to come to a solution. I have this custom class:

public class DBValues

{
     public DateTime DB_MfgDateTime;
     public string DB_PartNumber;
     public string DB_LotNumber;
     public string DB_BayResult;
     public string DB_BrakeSwitch;
     public string DB_SpeedSwitch;
     public string DB_RTC;
     public string DB_RFID;
     public string DB_TestSpin;
     public string DB_LEDs;
     public int DB_LedADC;
     public string DB_48Vstate;
     public double DB_48V;
     public string DB_12Vstate;
     public double DB_12V;
     public double DB_PLCV;
     public double DB_OpAmpV;
     public string DB_HandleUID;
     public string DB_StationID;
     public string DB_BayNumber;
     public string DB_VerifyMfgInfo;
     public DateTime DB_BuildTime;
     public string DB_FWVerify;
     public string DB_FWVersion;};

DBValues db = new DBValues();

And throughout I assign values like so: db.DB_SpeedSwitch = "PASS"; I don't want to fundamentally change how I'm assigning values but I would like to spit out the values for debug purposes. Something like:

foreach (var val in db)
{
    Debug.WriteLine(val.ToString();
}

I've tried implementing IEnumerable and making a new list of DBValues and I get close but my GetEnumerator chokes with OverflowException. I figured out why that was but not sure how to fix it. I read about a forech and a yield return but that's not working out either.

     public IEnumerator<DBValues> GetEnumerator()
     {

        //throw new NotImplementedException();
        foreach (var item in ??????)
        {
           yield return item;
        }
        //return GetEnumerator();
     }

     IEnumerator IEnumerable.GetEnumerator()
     {
        //throw new NotImplementedException();
        return GetEnumerator();
     }

Need some help!

Upvotes: 0

Views: 156

Answers (1)

NamiraJV
NamiraJV

Reputation: 666

You can use reflection for such purposes. Try to something like this:

FieldInfo[] fields = db.GetType().GetFields(BindingFlags.Public | 
                                          BindingFlags.NonPublic | 
                                          BindingFlags.Instance);
foreach(var field in fields)
{
    Debug.WriteLine(field.GetValue(db));
}

Upvotes: 3

Related Questions