C# "TypeInitializationException" hatası nasıl çözülür?

Katılım
11 Eylül 2020
Mesajlar
1.857
Çözümler
6
Yer
Almanya
Daha fazla  
Cinsiyet
Erkek
Meslek
König
Merhaba. Bir araba kiralama uygulaması yapmaya çalışıyorum. Bunun için static bir Veritabanı sınıfı oluşturdum. Ama hata veriyor. Hatanın nereden kaynaklandığını çözemedim. Yardımcı olabilir misiniz?
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace ArabaKiralama.ClassFolder
{
    public static class SanalVeritabani
    {
        public static List<Kullanici> KullaniciListesi;
        public static List<Araba> TümArabalar;

        static SanalVeritabani()
        {
            TümArabalar = new List<Araba>();
            KullaniciListesi = new List<Kullanici>();

            TümArabalar.Add(new Araba(KullaniciListesi[0].KullaniciID, Araba.ArabaIDOlusturucu(), 5000, "Honda", "Civic", 2015, 6, "Sedan", null));
            KullaniciListesi.Add(new Kullanici(Kullanici.GuidOlusturucu(), "İsim", "Ertürk", "İsim@gmail.com", "Varansk", "Sifre11", Convert.ToDateTime("11-10-2007"), "Şehir", true));
        }

        public static Kullanici IDAlKullaniciVer(string ID)
        {
            foreach (Kullanici item in KullaniciListesi)
            {
                if (item.KullaniciID == ID)
                {
                    return item;
                }
            }
            return null;
        }

        public static bool ListedeBuKullaniciVarmi(string KullaniciAdi, string Sifre)
        {
            foreach (Kullanici kisi in KullaniciListesi)
            {
                if (kisi.KullaniciAdi == KullaniciAdi.Trim() && kisi.Sifre == Sifre.Trim())
                {
                    return true;
                }
            }
            return false;
        }

    }
}

1683890873347.png
 
Try-catch bloklarına alın ilgili alanı.

Yani şu şekilde;

C#:
        public static bool ListedeBuKullaniciVarmi(string KullaniciAdi, string Sifre)
        {
            try{
                foreach (Kullanici kisi in KullaniciListesi)
                {
                    if (kisi.KullaniciAdi == KullaniciAdi.Trim() && kisi.Sifre == Sifre.Trim())
                    {
                        return true;
                    }
                }
                return false;
            }catch(Exception e){
                MessageBox.Show(e.Message);
            }
        }

Sonra çıkan uyarıyı atınız.
 
Try-catch bloklarına alın ilgili alanı.

Yani şu şekilde;

C#:
        public static bool ListedeBuKullaniciVarmi(string KullaniciAdi, string Sifre)
        {
            try{
                foreach (Kullanici kisi in KullaniciListesi)
                {
                    if (kisi.KullaniciAdi == KullaniciAdi.Trim() && kisi.Sifre == Sifre.Trim())
                    {
                        return true;
                    }
                }
                return false;
            }catch(Exception e){
                MessageBox.Show(e.Message);
            }
        }

Sonra çıkan uyarıyı atınız.
Try Catch e girmedi.
 
Aralık dışı hatası veriyor. Bir aralığın en düşük ve en fazla bir değeri var. Bu değerler dışında sonuç geldiği zaman hata veriyor. Kontrol ediniz.
 
Sorunu buldum. Araba nesnesini oluştururken Araba sınıfı içindeki ArabaSahibininID propertysine, oluşturulmuş bir kullanıcının ID'sini veriyordum. Ben static ctor içerisinde Önce kullanıcı sonra araba oluşturmam gerekirken önce araba sonra kullanıcı oluşturmuşum. Araba oluşturken de olmayan bir kullanıcının ID'sini almaya çalışmışım. Normalde Visual Studio'nun direkt olarak hatanın nerede oluştuğunu göstermesi lazımken nedense göstermedi.
 
Göstermemesi normal. OOP programlama yapıyorsunuz. Düzenli yapmanız lazım. Üstte dediğim gibi, aralık dışı hatasını o yüzden alıyorsunuz. Denetlenecek değerin dışında bir değer gönderiyorsunuz. Yani öncelik olarak farklı değer gönderiyorsunuz.
 

Technopat Haberler

Geri
Yukarı