Add an object in an object list of an object

I’m trying to add an object Card in a list Cards of an object Player, however, it returns an error :

NullReferenceException: Object reference not set to an instance of an object
RoundManager.DistributionsCartes () (at Assets/RoundManager.cs:161)
RoundManager.SetBet () (at Assets/RoundManager.cs:133)
UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:137)
UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:601)
UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:743)
UnityEngine.Events.UnityEvent`1[T0].Invoke (.T0 arg0) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_1.cs:53)
UnityEngine.UI.InputField.SendOnSubmit () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/InputField.cs:1334)
UnityEngine.UI.InputField.DeactivateInputField () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/InputField.cs:2011)
UnityEngine.UI.InputField.OnDeselect (UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/InputField.cs:2021)
UnityEngine.EventSystems.ExecuteEvents.Execute (IDeselectHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:115)
UnityEngine.EventSystems.ExecuteEvents.Execute[IDeselectHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269)
UnityEngine.EventSystems.EventSystem:Update()

Here is an extract of the code :

public class Card
{
    public int Suit { get; set; }
    public int Rank { get; set; }
    public Card(int suit, int rank)
    {
        Suit = suit;
        Rank = rank;
    }
}

public class Player
{
    public string Name {get; set;}
    public bool Human { get; set; }
    public int InitialMoney {get; set;}
    public bool MoneyToPlay {get;set;}
    public int Money {get; set;}
    public int InitialBet { get; set; }
    public bool Croupier { get; set; }
    public List<Card> Cards { get; set; }
    public Player(string name, bool human, bool croupier, int initialMoney) 
    {
		Name = name;
        Human = human;
        Croupier = croupier;
        InitialMoney = initialMoney;
        Money = initialMoney;     
    }
}

public class RoundManager : MonoBehaviour
{
    List<Player> players = new List<Player>();

    public void Start()
    {
	Player player1 = new Player("Player 1 IA" ,false, false, Random.Range(800, 1200));
	Player player2 = new Player("Player 2 IA" ,false, false, Random.Range(100, 2000));
	Player player3 = new Player("Player 3 IA" ,false, false, Random.Range(100, 550));
	Player player4 = new Player("Player 4 J" ,true, false, Random.Range(900, 1100));
	players.Add(player1);
	players.Add(player2);
	players.Add(player3);
	players.Add(player4);
        DistributionsCartes();

    Card TirageCarte()
    {
        Card card = new Card(Random.Range(1, 5), Random.Range(1, 14));
        return card;
    }

    void DistributionsCartes()
    {
	foreach (Player Pl in players) 
	{
		Debug.Log (Pl.Name);
		Pl.Cards.Add (TirageCarte());
		}
    }
}

If this extract isn’t enough, here is the full version C# Unity problem - Pastebin.com

I’m using Unity v5.1.0f3, and I really don’t know why it doesn’t work :confused:

Cards list seems to be uninitialized at all.
Add in Player constructor: Cards = new List;