Установить значение в списке <dynamic>не работает - PullRequest
0 голосов
/ 28 апреля 2019

Я написал фрагмент для моей большой проблемы, где я устанавливаю значение в том же объекте после чтения и форматирования. Пока значение читается из местоположения объекта, но оно не устанавливает его.

Я обращаюсь к объекту на основе индекса и свойства.

class Student
{
    public string City { get; set; }
    public double value1 { get; set; }
    public double value2 { get; set; }
}

Выше POCO используется для инициализации списка. Ниже приведен код, по которому возникает проблема

class ClassTest
{
    public static List<dynamic> GetUpdatedListCurrency(string[] CurrecyColumns, List<dynamic> dynamicList)
    {
        int Count = CurrecyColumns.Count();

        string first = CurrecyColumns.First();
        string two = CurrecyColumns.Skip(1).First();

        for (int i = 0; i < dynamicList.Count; i++)
        {
            var t = ((double)(dynamicList[i][first])).ToString("N", CultureInfo.CreateSpecificCulture("en-US"));
            var tt = ((double)(dynamicList[i][two])).ToString("N", CultureInfo.CreateSpecificCulture("en-US"));

            //Formatted value is availble at t and tt but it is not set back to that object

            dynamicList[i][first] = t;
            dynamicList[i][two] = tt;
        }

        return dynamicList;
    }

    static void Main()
    {
        var list = new List<Student>()
        {
            new Student() { City="Noida", value1 = 44412, value2 = 33341 },
            new Student() { City="Delhi", value1 = 11212, value2 = 3421 }
        };

        var converter = new Newtonsoft.Json.Converters.ExpandoObjectConverter();
        dynamic expandoObjectList = JsonConvert.DeserializeObject<List<ExpandoObject>>(JsonConvert.SerializeObject(list), converter);

        string Columns = " value1 as value3, value2 as value4";

        var res = ((List<ExpandoObject>)expandoObjectList)
                       .ToDynamicList().AsQueryable()
                       .Select("new (" + Columns + ")")
                       .ToDynamicList().ToList();

        string str = "value3,value4";
        var updatedList = GetUpdatedListCurrency(str.Split(','), res);

    }
}

1 Ответ

0 голосов
/ 28 апреля 2019

Хорошо. Итак, наконец, я прошел через это с другим решением, но я до сих пор не ясно, почему выше не следует устанавливать значение. Любой кто-нибудь может ответить подробно. Ниже приведен рабочий код для меня. Я получил доступ к динамическому списку с индексом и установил значение.

for (int i = 0; i < dynamicList.Count; i++)
                    {
                        dynamicList[i].GetType().GetProperty(first)
                            .SetValue(dynamicList[i], ((double)(dynamicList[i][first])).ToString("N", CultureInfo.CreateSpecificCulture("fr")), null);

                        dynamicList[i].GetType().GetProperty(two)
                            .SetValue(dynamicList[i], ((double)(dynamicList[i][first])).ToString("N", CultureInfo.CreateSpecificCulture("fr")), null);
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...