Coroutine not executing after waitforseconds

I am making text appear then dissapear after the time in the float variable called waitseconds, however whenever i test this it never executes after the waitforseconds, im not sure why this is happening, the Correct gameobject is setting active but then not deactivating after the yield.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Answer : MonoBehaviour
{
    public bool answer;
    public GameObject back;
    public GameObject Player;
    public GameObject Correct;
    public GameObject incorrect;
    public float waitseconds = 0.5f;
   
    void OnTriggerEnter(Collider other)
    {
        if (answer == true)
        {
            StartCoroutine("Correctanswer");
            Destroy(this.gameObject);
            Destroy(back.gameObject);
            Debug.Log("destroy");
            PlayerMovement.Score += 500;

        }
        if (answer == false)
        {
            PlayerMovement.livesleft -= 1;
        }
    }
    void Update()
    {
        if (PlayerMovement.livesleft == 0)
        {
            SceneManager.LoadScene("Fail");
        }
    }
    private IEnumerator Correctanswer()
    {
        Correct.gameObject.SetActive(true);
        Debug.Log("aftertrue");
        yield return new WaitForSeconds(waitseconds);
        Correct.SetActive(false);
        Debug.Log("afteryield");
    }
}

Coroutines are maintained by the MonoBehaviour that starts them. When you Destroy(this.gameObject), that implicitly destroys all the components attached to the object (including this), which implicitly destroys all the coroutines they are running.

Thanks, I didn’t notice that my new script works by instead deactivating the mesh renderer on the object instead. If anyone is wondering this is the new working script.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Answer : MonoBehaviour
{
    public bool answer;
    public GameObject back;
    public GameObject Player;
    public GameObject Correct;
    public GameObject incorrect;
    public float waitseconds = 0.5f;
    private MeshRenderer rend;

    void OnTriggerEnter(Collider other)
    {
        if (answer == true)
        {
            StartCoroutine("Correctanswer");
            rend = GetComponent<MeshRenderer>();
            rend.enabled = false;
            Destroy(back.gameObject);
            Debug.Log("destroy");
            PlayerMovement.Score += 500;

        }
        if (answer == false)
        {
            PlayerMovement.livesleft -= 1;
            StartCoroutine("Incorrectanswer");
        }
    }
    void Update()
    {
        if (PlayerMovement.livesleft == 0)
        {
            SceneManager.LoadScene("Fail");
        }
    }
    private IEnumerator Correctanswer()
    {
        Correct.gameObject.SetActive(true);
        Debug.Log("aftertrue");
        yield return new WaitForSeconds(waitseconds);
        Correct.SetActive(false);
        Debug.Log("afteryield");
    }
    private IEnumerator Incorrectanswer()
    {
        incorrect.gameObject.SetActive(true);
        Debug.Log("aftertrueincorrect");
        yield return new WaitForSeconds(waitseconds);
        incorrect.SetActive(false);
        Debug.Log("afteryieldincorrect");
    }
}