You have not provided the surrounding code in which you use it, the line you give does not actually do anything at this moment, it does not evaluate anything, it just creates an expression tree.
By accepting some restrictions with your code and assuming that you can get to the Components in the game object
var gameObject = new GameObject(); var types = new List<string>() { "a", "b", "c" }; var newObjects = types.Select(t => (IGameManager)gameObject.AddComponent(t));
with your code you have created an expression tree, every time you do something with it, it will run expressions inside it. I guess this is what happens to you. You can see here in my code that every time you request an account, you get more objects in your game objects.
To avoid this, evaluate it once, turning it into a list or array as follows: -
var newObjects = types.Select(t => (IGameManager)gameObject.AddComponent(t)).ToList();
source share