A more graceful way to get a list/array of a certain component from all GameObjects of a type?

I’m using FindObjectsOfType() to get an array of GameObjects that have a certain script attached. But what I really want is a list/array of the SpriteRenderer on each of those objects. I’ve tried different ways of casting without luck. Is there a more graceful way to do it than manually running through the array of objects and adding a reference to the SpriteRenderer of each one to a list?

Here’s what I’m doing now, it seems ugly:

public class DefenderButton : MonoBehaviour
{
	List<SpriteRenderer> allDefenderSRs = new List<SpriteRenderer>();

	private void Start()
	{
		DefenderButton[] allDefenderButtons = FindObjectsOfType<DefenderButton>();
		foreach (var item in allDefenderButtons)
		{
			allDefenderSRs.Add(item.GetComponent<SpriteRenderer>());
		}
	}

Only thing you could do is reduce code lines with System.Linq.

    private List<SpriteRenderer> allDefenderSRs;

    private void Start()
    {
        allDefenderSRs = FindObjectsOfType<DefenderButton>()
            .Select(a => a.GetComponent<SpriteRenderer>())
            .ToList();
    }