Çözüldü C# Breakpoint İle Farklı Sonuç Veriyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

manlygarroway

Decapat
Katılım
11 Kasım 2020
Mesajlar
18
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar merhabalar, Visual Studio'da C# ile 10 haneli rastgele ID üreten bir kod bloğu yazdım. Normalde beklediğimiz sonuç örneğin "C5X7D8Q9B0" gibi bir şey olsun. Fakat program bize ilk 2 haneyi alıp tekrarlatıyor mesela "C5C5C5C5C5" gibi. İşin ilginç kısmı ise şu, nerede hata alıyoruz diye Breakpoint ile açıyoruz ve istediğimiz sonucu alıyoruz yani örneğin bunu "C5X7D8Q9B0" fakat programı normal açtığımızda (Breakpoint olmadan) "C5C5C5C5C5" sonucunu alıyoruz.
Yani kısacası breakpoint var iken farklı yok iken farklı bir sonuç alıyoruz. Böyle bir şey mümkün olabilir mi ?

Kod:
public void RandomID()
        {
            string[] ID = new string[10];
            for (int i = 0; i <= 8; i += 2)    //ID ÜRETİLEN YER
            {
                int charKodu = rastgeleSayiUret(65, 91);
                ID = Convert.ToChar(charKodu).ToString(); //0,2,4,6,8
            }
            for (int j = 1; j <= 9; j += 2)
            {
                Random rnd = new Random();
                int rndsayi;
                rndsayi = rnd.Next(0, 10);
                ID[j] = rndsayi.ToString(); //1,3,5,7,9 
            }
            foreach (string k in ID)
            {
                Txt_ID.Text = Txt_ID.Text + k;
            }
        }


Kod bloğumuz bu.
 
Çözüm
Sürekli random nesnesi başlatmak yerine bir kere herhangi bir yerde başlat sonra ister parametreye referans olarak geç ister sınıf nesnesi olarak eriş. Örn;

C#:
static string RandomID(ref Random rnd)
{
    string ID = "";
    for (int i = 0; i<10; i++)
    {
        if(i%2==0)
        {
            ID += Convert.ToChar(rnd.Next(65, 91));   
        }else
        {
            ID += Convert.ToChar(rnd.Next(48, 58));
        }
    }
    return ID;
}

static void Main(string[] args)
{
    Random rnd = new Random();
    Console.WriteLine( RandomID( ref rnd ) );
    Console.WriteLine( RandomID( ref rnd ) );
}
Sürekli random nesnesi başlatmak yerine bir kere herhangi bir yerde başlat sonra ister parametreye referans olarak geç ister sınıf nesnesi olarak eriş. Örn;

C#:
static string RandomID(ref Random rnd)
{
    string ID = "";
    for (int i = 0; i<10; i++)
    {
        if(i%2==0)
        {
            ID += Convert.ToChar(rnd.Next(65, 91));   
        }else
        {
            ID += Convert.ToChar(rnd.Next(48, 58));
        }
    }
    return ID;
}

static void Main(string[] args)
{
    Random rnd = new Random();
    Console.WriteLine( RandomID( ref rnd ) );
    Console.WriteLine( RandomID( ref rnd ) );
}
 
Çözüm
Sürekli random nesnesi başlatmak yerine bir kere herhangi bir yerde başlat sonra ister parametreye referans olarak geç ister sınıf nesnesi olarak eriş. Örn;

C#:
static string RandomID(ref Random rnd)
{
    string ID = "";
    for (int i = 0; i<10; i++)
    {
        if(i%2==0)
        {
            ID += Convert.ToChar(rnd.Next(65, 91));  
        }else
        {
            ID += Convert.ToChar(rnd.Next(48, 58));
        }
    }
    return ID;
}

static void Main(string[] args)
{
    Random rnd = new Random();
    Console.WriteLine( RandomID( ref rnd ) );
    Console.WriteLine( RandomID( ref rnd ) );
}

Teşekkür ederim, çalıştı.
 

Geri
Yukarı