Как получить доступ к свойствам члена класса со списком <class>типа - PullRequest
0 голосов
/ 03 апреля 2020

В настоящее время у меня есть следующие Json, которые я преобразовал в простые классы C#. Мой класс простых объектов я помещаю их в класс ModelMock, где я пытаюсь получить доступ к свойствам 'name' и 'value'. Но я не могу получить доступ, и я получаю и ошибку. Ошибка, которую я получаю: «Список» не содержит определения для «имени» и «значения»

Вот Json для ссылки:

 {
"matchActionsReasons": [
   {
     "name": "False positive",
     "value": -2147483648
   },
   {
     "name": "Acceptable risk",
     "value": -2147483647
   },
   {
     "name": "Manager approval",
     "value": -2147483646
   }
 ]
}

Вот мой класс модели:

public class ModelMock
    {
        public static ModelMock SaveSettingsModel()
        {
            return new ModelMock
            {

                matchActionsReasons =new List<MatchActionsReason>
                {    

                         name = "False positive",  **//Geting the error here**
                         value  = -2147483648      **//Geting the error here**
                }

            };

        }

        public class MatchActionsReason
        {
            public string name { get; set; }
            public int value { get; set; }
        }


            public List<MatchActionsReason> matchActionsReasons { get; set; }

    }

Ответы [ 3 ]

1 голос
/ 03 апреля 2020

Вы должны создавать и добавлять объекты типа MatchActionsReason:

// Using a collection initializer for the list
// and object initializers for the items
matchActionsReasons = new List<MatchActionsReason>{    
    new MatchActionsReason{ name = "False positive", value = -2147483648 }, 
    new MatchActionsReason{ name = "Acceptable risk", value = -2147483647 }, 
    new MatchActionsReason{ name = "Manager approval", value = -2147483646 }
};

или

// Using Add
matchActionsReasons = new List<MatchActionsReason>();
matchActionsReasons.Add(
    new MatchActionsReason{ name = "False positive", value = -2147483648 }
);
matchActionsReasons.Add(
    new MatchActionsReason{ name = "Acceptable risk", value = -2147483647 }
);  
matchActionsReasons.Add(
    new MatchActionsReason{ name = "Manager approval", value = -2147483646 }
); 

Сам класс List<T> не имеет name и value свойства. Он имеет, среди прочего, свойство Count.

Вы можете получить доступ к элементам списка следующим образом:

string s = matchActionsReasons[1].name; // ==> "Acceptable risk"

или

MatchActionsReason mar = matchActionsReasons[1];
string s = mar.name; // ==> "Acceptable risk"
0 голосов
/ 03 апреля 2020

Вам необходимо добавить новый объект MatchActionsReason в ваш список. Как ниже.

matchActionsReasons = new List<MatchActionsReason>();
matchActionsReasons.Add(new MatchActionsReason(){ name = "foo", value = 115 });
0 голосов
/ 03 апреля 2020

Вы должны написать это так:

matchActionsReasons =new List<MatchActionsReason>
 {    

       new MatchActionReason
       {
           name = "False positive",
           value  = -2147483648
       },
       add more instances here...          
 }

Таким образом, полный пример выглядит следующим образом:

public class ModelMock
{
    public static ModelMock SaveSettingsModel()
    {
        return new ModelMock
        {

            matchActionsReasons =new List<MatchActionsReason>
            {    
                 new MatchActionReason
                 {
                     name = "False positive",
                     value  = -2147483648
                 },
                 new MatchActionReason
                 {
                     name = "Another False One",
                     value  = -111111111
                 },
                 add more instances here...   
            }

        };

    }

    public class MatchActionsReason
    {
        public string name { get; set; }
        public int value { get; set; }
    }


        public List<MatchActionsReason> matchActionsReasons { get; set; }

}

Причина в том, что когда вы создаете новый список {ставите здесь новые экземпляры}

Таким образом, между скобками вы помещаете экземпляры, которые вы добавляете в список.

Это называется инициализатором коллекции.

Это документация Microsoft для Инициализаторы объекта и коллекции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...