C# Tekrardan kaçınmak için tavsiye

Arkadaşlar merhaba c# dilinde bir uygulama yapıyorum
Fakat 2 tane fonksiyonun içinde tekrar eden “dönen rastgele sayıların her defasında eşitliğini” kontrol ediyorum
Ben bir fonksiyon yapıp iki fonksiyonumun içinde tekrar eden kodu tek fonksiyon altında toplayıp öyle çağırmak istiyorum sanırım beceremedim cünkü farklı değerleri karşılıyor yardımcı olursanız sevinirim

Kodlarımın ilgili kısmı şu şekilde;

private void btnOyunaBasla_Click(object sender, EventArgs e)
        {
            int sayac = 0;
            foreach (NumericUpDown item in gBoxTahminler.Controls)
            {
                tahminSayilari[sayac] = Convert.ToInt32(item.Value);
                sayac++;
            }
            tahminSayilari = DiziSirala(tahminSayilari);
            sayac = 5;

            foreach (NumericUpDown item in gBoxTahminler.Controls)
            {
                item.Value = tahminSayilari[sayac];
                sayac--;
            }
            if (DiziSorunsuzMu(tahminSayilari))
            {
                lblMesaj.Text = "Sayılar Kaydedildi... Oyun Başlıyor...";
                gBoxTutulanlar.Visible = true;
                foreach (NumericUpDown item in gBoxTahminler.Controls)
                {
                    item.Enabled = false;
                }
                btnSistemTahmin.Enabled = false;
                btnOyunaBasla.Enabled = false;

                for (int i = 0; i < 6; i++)
                {
                    tutulanSayilar[i] = RastgeleSayiGetir(tutulanSayilar);
                }
                int diziIndex = 0;
                foreach (NumericUpDown item in gBoxTutulanlar.Controls)
                {
                    int eglenceSayac = 0;
                    do
                    {
                        rasgele = new Random();
                        int sayi = rasgele.Next(1, 49);
                        item.Value = sayi;
                        System.Threading.Thread.Sleep(50);
                        Application.DoEvents();
                        eglenceSayac++;

                    } while (eglenceSayac <= 8);
                    item.Value = tutulanSayilar[diziIndex];
                    diziIndex++;
                }
                btnSonucGoster.Visible = true;
            }
            else
            {
                lblMesaj.Text = "Bir sayı 1 defa kullanılır...";
            }
        }

Manuel olarak sisteme sayı girildiğinde bu fonksiyonu kullanıyorum

private void btnSistemTahmin_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 6; i++)
            {
                // diziye sıra sıra atıyor gelen rastgele sayıları
                tahminSayilari[i] = RastgeleSayiGetir(tahminSayilari);
            }
            tahminSayilari = DiziSirala(tahminSayilari);
            int sayac = 5;
            foreach (NumericUpDown item in gBoxTahminler.Controls)
            {
                item.Value = tahminSayilari[sayac];
                sayac--;
            }
            lblMesaj.Text = "Sistem Sayıları Oluşturdu...";
        }

Eğer sistemin tahmin etmesini istersem bu fonksiyonu kullanıyorum

private int RastgeleSayiGetir(int[] gelenDizi)
        {
            bool sayiVarMi;
            do
            {
                sayiVarMi = false;
                rasgele = new Random();
                rasgeleSayi = rasgele.Next(1, 49);
                for (int i = 0; i < gelenDizi.Length; i++)
                {
                    if (gelenDizi[i] == rasgeleSayi)
                    {
                        sayiVarMi = true;
                        break;
                    }
                }
            } while (sayiVarMi);
            return rasgeleSayi;
        }

Bana yardımcı olması için ortak bir fonksiyonla gelen rastgele sayıları üretip aynı zamanda eşitliğini kontrol ediyorum

Ve şu fonksiyonuda kullanıyorum bir yerlerde

private bool DiziSorunsuzMu(int[] gelenDizi)
        {
            bool sorunsuzMu = true;
            for (int i = 0; i < 5; i++)
            {
                for (int j = i + 1; j < 6; j++)
                {
                    if (gelenDizi[i] == gelenDizi[j])
                    {
                        sorunsuzMu = false;
                        break;
                    }
                }
            }
            return sorunsuzMu;
        }

Dizinin sorunsuzmu olup olmadıgını kontrol ediyorum

RastgeleSayı ve DiziSorunsuzmu Fonksiyonlarında eşitliği kontrol ettiğim yerleri tek bir fonksiyon içinde yazıp gelen değerle işleme soksam olurmu sizce?
Basit ama yapamadım belki anlatamadım derdimi şimdiden teşekkürler

Kodun geri kalani olmadan anlamlari olmadigi icin ilk iki parcayi es gectim. (bkz: Soru Sorarken Sıkça Düşülen Hatalar #6)

Kalan iki parcayi tek bir fonksiyona cekmek mantikli degil, cunku farkli isler yapiyorlar.

Yukaridaki Containts kullanilarak basitlestirilebilir; sayiVarMi + break de continue'ya donusur. Enumerable.Contains Method (System.Linq) | Microsoft Learn

Asagidaki array’de tekrar aradigi icin daha basitlestirilemez ama 5/6 yerine .Length kullanilarak ve sorunsuzMu + break yerine dogrudan return false ile okunurlugu artirilabilir.

hocam ikinci söylediğini anladım da
ilk söylediğin contains ile nasıl kullanacagımı anlamadım

if gelenDizi.Contains(rasgeleSayi) { continue; }

veya

do { rastGele = random… } while (gelenDizi.Contains(rastGele);

Bu arada Random objesi program basina bir kere yaratilmali.

hocam harikasın ya emeğine sağlık

hocam son olarak fronted alanımı geliştirmek istiyorum önerebileceğiniz türkçe kaynak var mıdır?