OK, I have a few points to raise here which I think need consideration:

1. Again, I think we need to be more lenient with the type here. Since `Overrides` is public, a consumer could potentially add *anything* to it for the `typeof(ILineProcessor)` key (this is not ideal and perhaps needs some more thought separately).

2. if the current value is null I think we can follow the same path as if the key does not exist

3. The exception type does not really communicate the truth. The value could be not null but of a type which doesn't cast to `List<Type>`. Given point 2, this can just communicate an invalid type.

4. If multiple line processors handle the same # directive, I guess it has to be a case of last in wins? In that case we should prepend the current collection with the new item.

I'm thinking something like this could work:
```C#
if (!Overrides.ContainsKey(typeof(ILineProcessor)) || Overrides[typeof(ILineProcessor)] == null)
{
    Overrides[typeof(ILineProcessor)] = new[] { typeof(T) };
    return _this;
}

var processors = Overrides[typeof(ILineProcessor)] as IEnumerable<Type>;
if (processors == null)
{
    throw new InvalidLineProcessorsTypeException("The line processors type is not enumerable.");
}

Overrides[typeof(ILineProcessor)] = new[] { typeof(T) }.Concat(processors).ToArray();
return _this;
```