No.
Если вы просто используете return mlist
, вы вернете экземпляр mlist
, в то время как исходный код возвращает неполную копию.
Предположим, что ваш класс выглядит следующим образом:
class Foo
{
public Foo()
{
mList.Add(1);
}
private List<int> mList = new List<int>();
public List<int> getList()
{
List<int> list = new List<int>();
list.AddRange(mList);
return list;
}
}
И теперь вы бежите
var x = new Foo();
x.getList().Add(2);
x.getList().Add(3);
Содержание mList
все равно будет один 1
, потому что звонки на getList
вернулись копии mList
, а не сам список.
Если изменить код, как вы делали в вашем вопросе, вы изменили бы mList
он теперь будет содержать элементы 1
, 2
и 3
.
Это не ясно из названия метода, что копия возвращается, так что вы, возможно, хотите изменить его на что-то вроде GetListCopy
(в этом случае метод может просто вернуть new List<MyClass>(mList)
или mList.ToList()
), или возвращает список как a IReadOnlyList
, чтобы уточнить, что список не следует изменять.
public IReadOnlyCollection<MyClass> getList()
{
return mList.AsReadOnly();
}
Да. Из показанного кода этого должно быть достаточно. –
Не совсем то же самое, поскольку 'getList' создает новый список с теми же объектами, тогда как' return mList' возвращает даже тот же список. Поэтому, если вы будете называть 'getList(), Clear()' также будет очищен исходный список. –
Это свойство имеет уродливый побочный эффект, потому что это означает, что вы можете изменить состояние класса-владельца, изменив возвращаемый список. Возвращение 'IEnumerable' или создание его метода было бы подходящей задачей. – Silvermind