I have a (non-MB) class that is supposed to store information on which script to add in certaint situations. Or to put it less abstractly, it’s a class called Building which I’d like to somehow connect to certain (but for each instance of Building a different) MonoBehaviour so that I can loop through a list of buildings, for example, and add the MonoBehaviour connected to each building to a GameObject. Here is my current constructor for the class (which is throwing me a “Expression denotes a type', where a variable’, value' or method group’ was expected” error when used):

public Building (string id, string descr, int appearance, int constrTime, int constrCost, int stones, bool available, MonoBehaviour funct)
	{
		name = id;
		description = descr;
		appearanceIndex = appearance;
		constructionDays = constrTime;
		constructionCost = constrCost;
		stoneNeeded = stones;
		unlocked = available;
		functionality = funct;
	}

The only other way I can think of how to handle this is creating a list of MonoBehaviours, assigning them per drag and drop in the editor and storing the index of the respective MB in the Building class, but that’s not exactly pretty…

It seems you are confused by some fundamental differences between a class / Type and an instance of that class.

This declares the variable script of type MonoBehaviour:

    MonoBehaviour script;

This variables can hold a reference to an instance of a class that is derived from MonoBehaviour.

AddComponent on the other hand is responsible of creating and adding an instance of a certain Type. Generic parameters can only be filled with a Type, never with an instance reference.

What you probably want is storing different MonoBehaviour Type-objects in a list and use that System.Type object to add an instance to a gameobject:

public Building (string id, string descr, int appearance, int constrTime, int constrCost, int stones, bool available, System.Type funct)
{
    //[...]
}

A generic parameter can only be fed with a constant Type at compile-time. To be dynamic at runtime you have to use the System.Type version of AddComponent.

System.Type scriptType = [Some type reference, for example: typeof(Terrain)];
// [...]
if(scriptType != null)
{
    mySet.gameObject.AddComponent(scriptType);
}