How are properties for a Collection set?
I’ve created a class with a Collection properties. I want to add to the List anytime I set a new value. Using _name.Add(value) within the set method doesn’t work.
Section newSec = new Section();
newSec.subHead.Add("test string");
newSec.subHead.Add("another test string");
public class Section
{
public String head { get; set; }
private List<string> _subHead = new List<string>();
private List<string> _content = new List<string>();
public List<string> subHead
{
get
{ return _subHead; }
set
{
_subHead.Add(value);
}
}
public List<string> content
{
get
{ return _content; }
set
{
_content.Add(value);
}
}
}
Update with my solution:
public class Section
{
private List<string> _head = new List<string>();
private List<string> _subHead = new List<string>();
private List<string> _content = new List<string>();
public List<string> Head
{
get
{ return _head; }
}
public List<string> SubHead
{
get
{ return _subHead; }
}
public List<string> Content
{
get
{ return _content; }
}
public void AddHeading(string line)
{
Head.Add(line);
}
public void AddSubHeading(string line)
{
SubHead.Add(line);
}
public void AddContent(string line)
{
Content.Add(line);
}
}
It would be inappropriate for it to be part of the setter – it’s not like you’re really setting the whole list of strings – you’re just trying to add one.
There are a few options:
AddSubheadingandAddContentmethods in your class, and only expose read-only versions of the listsIn the second case, your code can be just:
This is reasonably pragmatic code, although it does mean that callers can mutate your collections any way they want, which might not be ideal. The first approach keeps the most control (only your code ever sees the mutable list) but may not be as convenient for callers.
Making the setter of a collection type actually just add a single element to an existing collection is neither feasible nor would it be pleasant, so I’d advise you to just give up on that idea.