4

ループの反復に基づいてオブジェクトに新しいプロパティを追加したいのですが、これは.Netで可能ですか?これを実行したい理由は、Excelスプレッドシートの行をループしていて、正常に読み取られた行ごとに、新しい動的オブジェクトプロパティを作成したいからです。したがって、ループが完了したら、オブジェクトをメソッドに渡して、すべてのレコードをログに記録するだけです。

これまでのコードについては、以下を参照してください。

    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

私はこれまでこれを試みたことがないので、どのようにアプローチするかはわかりませんが、どんな助けでも素晴らしいでしょう。ありがとう。

4

3 に答える 3

1

ループ反復に基づいてオブジェクトに新しいプロパティを追加したいのですが、これは .Net で可能ですか?

並べ替え。プロパティを追加ExpandoObjectするときに として扱い、を使用することをお勧めします。IDictionary<string, object>

そうは言っても、後でそれらのプロパティをプロパティとして使用しようとしない場合、実際にそれらをプロパティにする必要はありますか? 最初にa を使用しないのはなぜDictionary<string, object>ですか?

于 2012-10-01T09:14:55.000 に答える
0

はい、これに使用できますExpandoObject。必要なプロパティを割り当てるだけで、それらのプロパティが想定されます。

于 2012-10-01T09:15:23.157 に答える
0
dynamic settings= new ExpandoObject();
于 2012-10-01T09:22:08.633 に答える