When to initialize infrequently used base class objects
First: I doubt that creating a new List&lt;&gt; object creates enough overhead which has measurable impact on your system so unless you can prove that it's a problem don't worry about it.

That being said: The classic solution to that problem is lazy instantiation. As you have a property already this can be easily achieved by:

public class ErrorBase
{
    public bool HasError { get; set; }

    private List&lt;Error&gt; _ErrorList = null;
    public List&lt;Error&gt; ErrorList
    {
        get
        {
            if (_ErrorList == null)
            {
                _ErrorList = new List&lt;Error&gt;();
            }
            return _ErrorList;
        }
    }

    public ErrorBase()
    {
        HasError = false;
    }
}


If you have multiple threads adding to it then you need to add some locking in the get - but then on the other hand List&lt;&gt; itself is not thread-safe so I assume that's not the case.

In .NET 4.0 and later you have Lazy&lt;&gt; which will make the code a little bit shorter.