как передать ссылку this в быстрой инициализации объекта - PullRequest
3 голосов
/ 11 декабря 2011

Например:

List<Projects> projectList = new List<Projects>
{
    new Project
    { 
         id = 100500, 
         Subprojects = new List<Subproject>
         {
             new Subproject { Project = "**Need to pass pointer on the project**" },
         }
    }
}

Как можно передать этот указатель?

Это вопрос только о синтаксисе, я ясно понимаю, что это можно сделать другим способом.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

Как насчет простого добавления стандартных функций / конструкторов к каждому из классов?

Например:

List<Project> cProjects = new List<Project> { new Project(100500) }; 

public class Project
{
    public Project(int id)
    {
        this.id = id;
        Subprojects = new List<Subproject> { new Subproject(this) };
    }
    public int id;
    public List<Subproject> Subprojects;
}
public class Subproject
{
    public Subproject(Project project)
    {
        this.Project = project;
    }

    public Project Project;
}
2 голосов
/ 11 декабря 2011

Вы не можете сделать это одним оператором: указатель (фактически, ссылка), который вы хотели бы назначить для Project, не выделяется в тот момент, когда вы хотите назначить его.Вам нужно использовать промежуточную переменную - например, так:

Project p;
List<Projects> projectList = new List() {
    p = new Project() { 
        id = 100500
    ,   Subprojects = new List<Subproject>()
    }
};
p.Subprojects.Add(
    new Subproject { Project = p }
);
...