Error destroying prefab

public class Dices : MonoBehaviour {

    public GameObject Dice4_1;
    public GameObject Dice4_2;
    public GameObject Dice4_3;
    public GameObject Dice4_4;

    // Use this for initialization
    void Start () {
    }

	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            int result = Random.Range(1, 5);
            if (GameObject.Find("Dice4_1_img(Clone)") != null)
            {
                Destroy(Dice4_1);
            }
            if (GameObject.Find("Dice4_2_img(Clone)") != null)
            {
                Destroy(Dice4_2);
            }
            if (GameObject.Find("Dice4_3_img(Clone)") != null)
            {
                Destroy(Dice4_3);
            }
            if (GameObject.Find("Dice4_4_img(Clone)") != null)
            {
                Destroy(Dice4_4);
            }

            if (result == 1)
            {
                Instantiate(Dice4_1, transform.position, transform.rotation);
            }
            if (result == 2)
            {
                Instantiate(Dice4_2, transform.position, transform.rotation);
            }
            if (result == 3)
            {
                Instantiate(Dice4_3, transform.position, transform.rotation);
            }
            if (result == 4)
            {
                Instantiate(Dice4_4, transform.position, transform.rotation);
            }
        }
    }
}

This gives me an error that says: To avoid lose of data bla bla bla, you should use DestroyInmediate(Object, true);

Then I change it, and it says, that DestroyInmediate doesnt exist in this contexts.

What I want is that each time I click on the object, it creates a prefab of another object (1 between 4), and if any of those 4 exists, then it should delete it, and then create the prefab that the RandomRange says.

Add a tag to the dices called: “dice” and then try something like this:

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class Dices : MonoBehaviour
{
    private List<GameObject> DicePool;

    /// <summary>
    /// Lazy loaded dice pool
    /// </summary>
    public List<GameObject> DiceObjects
    {
        get
        {
            //if the pool is not empty, return our pool
            if (DicePool.Any()) return DicePool;
            //if pool is empty, then fill the pool and return the pool
            DicePool = GameObject.FindGameObjectsWithTag("dices").ToList();
            return DicePool;
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            int result = Random.Range(1, 5);
            if (DiceObjects.Any())
            {
                //Destroy each dice
                foreach (var dice in DiceObjects)
                {
                    Destroy(dice);
                    DicePool.Remove(dice); //remove from the pool
                }
            }

            if (result == 1)
            {
                var go = (GameObject)Instantiate(Dice4_1, transform.position, transform.rotation);
                go.tag = "dice";
            }
            if (result == 2)
            {
                var go = (GameObject)Instantiate(Dice4_2, transform.position, transform.rotation);
                go.tag = "dice";
            }
            if (result == 3)
            {
                var go = (GameObject)Instantiate(Dice4_3, transform.position, transform.rotation);
                go.tag = "dice";
            }
            if (result == 4)
            {
                var go = (GameObject)Instantiate(Dice4_4, transform.position, transform.rotation);
                go.tag = "dice";
            }
        }
    }
}