Как добавить значение в список при использовании инициализатора объекта? - PullRequest
2 голосов
/ 23 октября 2019
private PostDto MapIntegration(IntDto integ)
{
    return new PostDto
    {
        prop1 = "7",
        prop2 = "10",
        prop3 = true,
        prop4 = "EA Test",
        product_list.Add(integ) // ERROR This says the name product_list does not exist in current context
    };
}

И когда мы смотрим на PostDto

public class PostDto 
{
    public string prop1 { get; set; }
    public string prop2 { get; set; }
    public bool prop3 { get; set; }
    public string prop4 { get; set; }
    public List<IntDto> product_list { get; set; }
}

Ответы [ 2 ]

6 голосов
/ 23 октября 2019

Инициализаторы коллекции позволяют только присваивать значения свойствам или полям объекта. Вы не можете получить доступ к элементу свойства объекта внутри инициализатора объекта, как это обычно бывает в других местах кода. Кроме того, даже если у вас была эта опция, список даже не инициализирован, поэтому вы не можете вызвать метод .Add().

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

private PostDto MapIntegration(IntDto integ)
{
    return new PostDto
    {
        prop1 = "7",
        prop2 = "10",
        prop3 = true,
        prop4 = "EA Test",
        // Create a new list with collection initializer.
        product_list = new List<IntDto>() { integ }
    };
}

Ссылки:

1 голос
/ 23 октября 2019

product_list не инициализирован.

private PostDto MapIntegration(IntDto integ)
{
    var ret = new List<IntDto>();
    ret.Add(integ);
    return new PostDto
    {
        prop1 = "7",
        prop2 = "10",
        prop3 = true,
        prop4 = "EA Test",
        product_list = ret
    };
}

Создайте временный список или что-то еще, что можно использовать.

...