Is it possible to have dynamic object properties in .net 4.0

I want to add new properties to an object based on loop iterations, is this possible in .Net? The reason I want to do this is to iterate over the rows in the Excel spreadsheet and for each row that I read successfully I want to create a new property of the dynamic object. Therefore, when the loop is complete, I can simply pass the object to the method and write all the records.

See below code:

protected void ReadData(string filePath, bool upload) { StringBuilder sb = new StringBuilder(); #region upload if (upload == true) // CSV file upload chosen { using (CsvReader csv = new CsvReader(new StreamReader(filePath), true)) // Cache CSV file to memory { int fieldCount = csv.FieldCount; // Total number of fields per row string[] headers = csv.GetFieldHeaders(); // Correct CSV headers stored in array SortedList<int, string> errorList = new SortedList<int, string>(); // This list will contain error values ORCData data = new ORCData(); bool errorFlag = false; int errorCount = 0; // Check if headers are correct first before reading data if (headers[0] != "first name" || headers[1] != "last name" || headers[2] != "job title" || headers[3] != "email address" || headers[4] != "telephone number" || headers[5] != "company" || headers[6] != "research manager" || headers[7] != "user card number") { sb.Append("Headers are incorrect"); } else { while (csv.ReadNextRecord()) try { //Check csv obj data for valid values for (int i = 0; i < fieldCount; i++) { if (i == 0 || i == 1) // FirstName and LastName { if (Regex.IsMatch(csv[i].ToString(), "^[az]+$", RegexOptions.IgnoreCase) == false) //REGEX letters only min of 5 char max of 20 { errorList.Add(errorCount, csv[i]); errorCount += 1; errorFlag = true; string text = csv[i].ToString(); } } } if (errorFlag == true) { sb.Append("<b>" + "Number of Error: " + errorCount + "</b>"); sb.Append("<ul>"); foreach (KeyValuePair<int, string> key in errorList) { sb.Append("<li>" + key.Value + "</li>"); } } else // All validation checks equaled to false. Create User { string message = ORCLdap.CreateUserAccount(rootLDAPPath, svcUsername, svcPassword, csv[0], csv[1], csv[2], csv[3], csv[4], csv[5], csv[7]); // TODO: Add to object here sb.Append(message); //sb.Append("<b>New user data uploaded successfully</b>"); } }// end of try catch (Exception ex) { sb.Append(ex.ToString()); } finally { lblMessage.Text = sb.ToString(); sb.Remove(0, sb.Length); hdnRdoSelection.Value = "1"; } } } } #endregion 

I have never tried to do this before, so I'm not sure how I will approach him, but any help would be wonderful. Thanks.

+4
source share
3 answers

I want to add new properties to an object based on loop iterations, is this possible in .Net?

Grade. You will probably want to use ExpandoObject , treating it as an IDictionary<string, object> when adding properties.

Having said that, if you are not going to try to use these properties as properties later, do you really need them to be properties at all? Why not just use Dictionary<string, object> to get started?

+1
source

Yes, you can use ExpandoObject for this. Just assign the properties you want and it will accept those properties.

0
source
 dynamic settings= new ExpandoObject(); 
0
source

Source: https://habr.com/ru/post/1437132/


All Articles