loop through a object property in asp.net c#

tomcattyy
tomcattyy used Ask the Experts™
on
Hello there,

I have an array create from read the url parameter to identify what field has been changed in the previous form. The Object has field like acct_no,acct_name,acct_email,add1,add2....
I want to loop through the array and pull the matching field value from the object.

org and aft are two objects
arInfo is the array contains the changed field name
for (int x = 0; x < arInfo.Length; x++)
        {
            string field=arInfo [x];
            listBody =  "original: " + org.fieldl + " - change to: " + aft.fieldl+"<br>";
        }
above code have error message saying object don't have the property "field". How can I concat the filed name to pull property like org.acct_name or org_add1 ?

Appreciate your help.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
maybe if you can post the objects org or aft.

If you stored the values for each field inside the object in a hashtable, dictionary or something, you could provide an indexer property. See the attached code snippet.
using System.Collections.Generic;
public class Program
{
    public static void Main(string[] args)
    {
        // example
        var org = new OrgClass();
        var aft = new OrgClass();
 
        var arInfo   = new string[] { "acct_name", "acct_email" };
        var listBody = "";
 
        for (var i = 0; i < arInfo.Length; i++)
        {
            var field = arInfo[i];
 
            listBody = "original: " + org[field] + " - change to: " + aft[field] + "<br>";
        }
 
        // instead of for ( int i = 0 ; ......
        // you could use foreach to save you the trouble of defining field each time : 
        foreach (var field in arInfo)
        {
            listBody = "original: " + org[field] + " - change to: " + aft[field] + "<br>";
        }
    }
}
 
public class OrgClass
{
    /// <summary>
    /// Stores the internal values.
    /// </summary>
    private Dictionary<string, string> FieldValues { get; set; }
 
    public string Name
    {
        get { return FieldValues["acct_name"]; }
        set { FieldValues["acct_name"] = value; }
    }
 
    public string Email
    {
        get { return FieldValues["acct_email"]; }
        set { FieldValues["acct_email"] = value; }
    }
 
    /// <summary>
    /// This operator allows you to let outside classes treat your 
    /// object like an indexed object.
    /// </summary>
    /// <param name="key">The field name.</param>
    /// <returns></returns>
    public string this[string key]
    {
        get { return FieldValues[key]; }
        set { FieldValues[key] = value; }
    }
}

Open in new window

Author

Commented:
Thanks, Joep

I think that's the way to go just I am not familiar with the dictionary creation, below is my class, can you point me where should I change to create the dictionary.

Author

Commented:
sorry forget the class code
[Serializable ]
public class userChange
{
    private string _corr;
    private string _office;
    private string _acct_no;
    private string _acct_name;
    private string _company;
    private string _marital;
    private string _add1;
    private string _add2;
    private string _city;
    private string _zip;
    private string _country;
    private string _phone;
    private string _fax;
    private string _email;
    private string _joinName;
    private string _mailadd1;
    private string _mailadd2;
    private string _mailcity;
    private string _mailst;
    private string _mailzip;
    private string _mailcountry;
    private string _request_IP;
 
    public userChange()
    {
      }
 
 
    public string corr
    {
        set { this._corr = value; }
        get { return  this._corr ;}  
    }
    public string office
    {
        set { this._office = value; }
        get { return this._office; }
    }
    public string acct_no
    {
        set { this._acct_no = value; }
        get { return this._acct_no; }
    }
    public string acct_name
    {
        set { this._acct_name = value; }
        get { return this._acct_name; }
    }
    public string company
    {
        set { this._company = value; }
        get { return this._company; }
    }    
    public string marital
    {
        set { this._marital = value; }
        get { return this._marital; }
    }
    public string add1
    {
        set { this._add1 = value; }
        get { return this._add1; }
    }
    public string add2
    {
        set { this._add2 = value; }
        get { return this._add2; }
    }
    public string city
    {
        set { this._city = value; }
        get { return this._city; }
    }
    public string zip
    {
        set { this._zip = value; }
        get { return this._zip; }
    }
    public string country
    {
        set { this._country = value; }
        get { return this._country; }
    }
    public string phone
    {
        set { this._phone = value; }
        get { return this._phone; }
    }
    public string fax
    {
        set { this._fax = value; }
        get { return this._fax; }
    }
    public string email
    {
        set { this._email = value; }
        get { return this._email; }
    }
    
    public string mailadd1
    {
        set { this._mailadd1 = value; }
        get { return this._mailadd1; }
    }
    public string mailadd2
    {
        set { this._mailadd2 = value; }
        get { return this._mailadd2; }
    }
    public string mailcity
    {
        set { this._mailcity = value; }
        get { return this._mailcity; }
    }
    public string mailst
    {
        set { this._mailst = value; }
        get { return this._mailst; }
    }
    public string mailzip
    {
        set { this._mailzip = value; }
        get { return this._mailzip; }
    }
    public string mailcountry
    {
        set { this._mailcountry = value; }
        get { return this._country; }
    }
    public string request_IP
    {
        set { this._request_IP = value; }
        get { return this._request_IP; }
    }
}

Open in new window

OWASP: Avoiding Hacker Tricks

Learn to build secure applications from the mindset of the hacker and avoid being exploited.

Sure, look at the snippet I created for you.
    [Serializable]
    public class userChange
    {
        // instead of using all string values, store them in a dictionary.
        /*
        private string _corr;
        private string _office;
        private string _acct_no;
        private string _acct_name;
        private string _company;
        private string _marital;
        private string _add1;
        */
 
        private Dictionary<string, string> Values;
 
        public userChange()
        {
            Values = new Dictionary<string, string>();
        }
 
        /* as an example I only included a few properties, but i think you'll know what I mean. */
        public string corr
        {
            set { Values["_corr"] = value; }
            get { return Values["_corr"]; }
        }
        public string office
        {
            set { Values["_office"] = value; }
            get { return Values["_office"]; }
        }
       
        public string acct_no
        {
            set { Values["_acct_no"] = value; }
            get { return Values["_acct_no"]; }
        }
 
        // provide this operator to have dynamic access to your members
        public string this[string key]
        {
            get { return Values[key]; }
            set { Values[key] = value; } 
        }
 
        // this method allows you to set and get the values through obj["_office"] syntax.
    }

Open in new window

Author

Commented:
Hello Joep,
I implement the new object but got an error, is it just the key name passed in is different than the one defined? Also I attached the new code, hope I did not make something wrong. Thanks.

The given key was not present in the dictionary.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.

Source Error:


Line 132:    public string this[string key]
Line 133:    {
Line 134:        get { return Values[key]; }
Line 135:        set { Values[key] = value; }
Line 136:    }
 

Source File: d:\Web\App_Code\userchange.cs    Line: 134


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
 
/// <summary>
/// Summary description for user
/// </summary>
[Serializable ]
public class userChange
{
    private Dictionary<string, string> Values;
    
    public userChange()
    {
        Values = new Dictionary<string, string>();
      }
 
 
    public string corr
    {
        set { Values ["_corr"] = value; }
        get { return  Values["_corr"] ;}  
    }
    public string office
    {
        set { Values["_office"] = value; }
        get { return Values["_office"]; }  
    }
    public string acct_no
    {
        set { Values["_acct_no"] = value; }
        get { return Values["_acct_no"]; }  
    }
    public string acct_name
    {
        set { Values["_acct_name"] = value; }
        get { return Values["_acct_name"]; }  
    }
    public string company
    {
        set { Values["_company"] = value; }
        get { return Values["_company"]; }  
    }    
    public string marital
    {
        set { Values["_marital"] = value; }
        get { return Values["_marital"]; }  
    }
    public string add1
    {
        set { Values["_add1"] = value; }
        get { return Values["_add1"]; }  
    }
    public string add2
    {
        set { Values["_add2"] = value; }
        get { return Values["_add2"]; }  
    }
    public string city
    {
        set { Values["_city"] = value; }
        get { return Values["_city"]; }  
    }
    public string zip
    {
        set { Values["_zip"] = value; }
        get { return Values["_zip"]; }  
    }
    public string country
    {
        set { Values["_country"] = value; }
        get { return Values["_country"]; }  
    }
    public string phone
    {
        set { Values["_phone"] = value; }
        get { return Values["_phone"]; }  
    }
    public string fax
    {
        set { Values["_fax"] = value; }
        get { return Values["_fax"]; }  
    }
    public string email
    {
        set { Values["_email"] = value; }
        get { return Values["_email"]; }  
    }
    
    public string mailadd1
    {
        set { Values["_mailadd1"] = value; }
        get { return Values["_mailadd1"]; }  
    }
    public string mailadd2
    {
        set { Values["_mailadd2"] = value; }
        get { return Values["_mailadd2"]; }
    }
    public string mailcity
    {
        set { Values["_mailcity"] = value; }
        get { return Values["_mailcity"]; }  
    }
    public string mailst
    {
        set { Values["_mailst"] = value; }
        get { return Values["_mailst"]; }  
    }
    public string mailzip
    {
        set { Values["_mailzip"] = value; }
        get { return Values["_mailzip"]; }  
    }
    public string mailcountry
    {
        set { Values["_mailcountry"] = value; }
        get { return Values["_mailcountry"]; }  
    }
    public string request_IP
    {
        set { Values["_request_IP"] = value; }
        get { return Values["_request_IP"]; }  
    }
    public string this[string key]
    {
        get { return Values[key]; }
        set { Values[key] = value; }
    }
 
}

Open in new window

Author

Commented:
Thanks Joep, It's the class key name not matching the ID from the page, I changed and it's working now. Appreciate your help.

Author

Commented:
Perfect and precise
If you do not set the values initially, adjust your class to look like this
public string corr
            {
                set { SetValue("_corr", value); }
                get { return GetValue("_corr"); }
            }
 
            private void SetValue(string key, string value)
            {
                // check if the key exists.
                if (!Values.ContainsKey(key))
                    Values.Add(key, "");
 
                Values[key] = value;
            }
 
            private string GetValue(string key)
            {
                if (!Values.ContainsKey(key))
                    Values.Add(key, "");
 
                return Values[key];
            }

Open in new window

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial