Isn't it really supposed to be dynamic? I think all the 3 if-else branches return List<Element>. `var` would be justified if the var was set to a value with some specific type right away - here it's not the case, since it's initialized with null. Then it's assigned one of the 3 possible values, and then it's returned from the function. So I'd rather have this bit of additional info for the reader of the code and for the parser.