2012-10-01 50 views
4

我想基於循環迭代向對象添加新屬性,這在.Net中可能嗎?我想這樣做的原因是我循環在Excel電子表格中的行,併爲每個成功讀取的行我想創建一個新的動態對象屬性。因此,當循環完成時,我可以簡單地將對象傳遞給方法並記錄所有記錄。是否有可能在.net 4.0中具有動態對象屬性

請參閱以下代碼至今:

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(), "^[a-z]+$", 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 

我從來沒有嘗試過,所以我不知道我怎麼會接近,但任何幫助將是巨大的,做到這一點。謝謝。

+0

我可以提出一個更簡單的例子嗎?目前尚不清楚您想添加動態屬性的位。坦率地說,一個'for(int i = 0; i <4; i ++)obj.SomeProp = value;'可能更清楚地表明意圖 –

回答

1

我想添加新的屬性到基於循環迭代的對象,這是可能的。淨?

的排序。您可能想要使用ExpandoObject,在添加屬性時將其視爲IDictionary<string, object>。儘管如此,如果你以後不打算嘗試使用這些屬性作爲屬性,你是否真的需要它們是屬性?爲什麼不使用Dictionary<string, object>開始?

+0

因此,如果我要使用集合並且此集合對象使用逗號連接多個字符串分隔符,這會是一個很好的解決方案嗎?我可以在創建日誌文件的類中解析我的集合的字符串部分。 –

0

是的,你可以使用ExpandoObject這個。簡單地分配你想要的屬性,它會承擔這些屬性。

0
dynamic settings= new ExpandoObject(); 
相關問題