Проблема возвращения ссылки на массив в C#

Подскажите, пожалуйста, как корректно передавать ссылку на массив (например список) из класса в класс. Например: есть список в Class1, неважно чего, например объектов некого класса3. Мне нужно использовать и редактировать его в Class2.

Ниже примеры, как пытаюсь делать - передаю через методы или через public IEnumerable. Как правильно?

1.

class Class1
{
    private List<Class3> _list  = new List<Class3>(5);
    // .....
    public IEnumerable<Class3> GetList()
    {
        return _list.AsEnumerable(); 
    }
} 
class Class1
{
    private List<Class3> _list  = new List<Class3> (5);
    // .....
    public List<Class3> GetList()
    {
        return _list; 
    }
}  
class Class1
{
    private List<Class3> _list  = new List<Class3> (5);
    public IEnumerable<Class3> GetList
    {
        get { return _list.AsEnumerable(); }
    }
    // .....
} 

Ответы (1 шт):

Автор решения: aepot

Через конструктор

class Class1
{
    private List<Class3> _list = new List<Class3>();

    private void SomeMethod()
    {
        Class2 class2 = new Class2(_list);
    }
}

class Class2
{
    private List<Class3> _list;

    public Class2(List<Class3> list)
    {
        _list = list;
    }
}

Через поле или свойство, покажу свойство

class Class1
{
    private List<Class3> _list = new List<Class3>();

    private void SomeMethod()
    {
        Class2 class2 = new Class2();
        class2.List = _list;
        // или так
        // Class2 class2 = new Class2() { List = _list };
    }
}

class Class2
{
    public List<Class3> List { get; set; }
}

Конечно, вы таким образом не сможете переприсвоить _list внутри Class1 из какого-то метода Class2, но элементы изменять сможете.

Если вам надо вернуть новый список из Class2 в Class1, можно использовать возвращаемое значение у метода.

class Class1
{
    private List<Class3> _list;

    private void SomeMethod()
    {
        Class2 class2 = new Class2();
        _list = class2.SomeMethod2();
    }
}

class Class2
{
    public List<Class3> SomeMethod2()
    {
        List<Class3> list = new List<Class3>();
        //...
        return list;
    }
}
→ Ссылка