Questions about assigning variables and classes.

Hey guys I have a few questions about the proper way to handle assigning data to objects (hundreds of variables, maybe thousands), basically I am looking for a class that can hold a lot of values that can easily be accessed. Should I make a separate class to store information like this?
Example:

private List<int> _NumberOfApplesBoxHas = new List<int>();

//I'll do some logic to get the number I want from the list. 
public int theNumberIWantFromAList;

public numberOfApplesBoxHas
{
    get {return _NumberOfApplesBoxHas[theNumberIWantFromAList]; }
    set {_NumberOfApplesBoxHas[theNumberIWantFromAList] = value; }
}

If I do go with this, what would be the best way to say ‘This box has this amount of apples / how do I tell the game this box is this value in the list’ would I just store the ID (Number of the List) on the object it self and reference that when I need to check the list?

Or should I create a component to attach to an object and store all these values on the object through C# variable?

Also why do you suggest this, as both memory effective and best practice?
Thanks so much!

Maybe a dictionary would do the trick?

<string, int> or <int, int>

I am not sure if they are serialisable now, you would want to look into that if you need to save it on disk.