C# - Generic Class içerisinde arama yapma

  1. Insyder
    5
    891
    28.10.2019 22:02:00

    Merhaba arkadaşlar. Burada kod yerine ekran görüntüsü paylaşacağım çünkü anlayamadığım bir şekilde yazdığım kodlar bozuluyor. Soruna dönersek;

    1 form ve 2 adet class hazırladım.

    enter image description here

    enter image description here

    Stapel adlı Class Yapısı

    enter image description here

    Görüldüğü üzere gelen item bu class içerisinde ki my list isimli generic liste kaydedilmekte.

    Student adlı Class Yapısı

    enter image description here

    Görüldüğü üzere formumda bir kaç tuş var ancak çalıştıramadığım fonksiyon arama bölümü oldu.

    İlk formun kod sayfasında normal bir liste var. Bu listeye, hazırladığım class proplarına göre eklemeler yapıyorum.

    enter image description here

    string naam = textBox1.Text;
    StudentenList.Ekle(new Student(naam));
    listBox1.Items.Add(naam);
    textBox1.Clear();
    

    Eklenmekle birlikte Stapel classı içerisinde Exist isimli bir metod çalıştırıyorum. Bu metodun amacı listboxda ki itemlerin içerisinde belirtilen string ifade var mı yok mu?

    enter image description here

    Stapel class ı içerisindeki metod

    public bool Exist(T item)
        {
    
        }
    

    Sorunum arkadaşlar bu class içerisindeki mylist isimli generic listemin içerisinde item parametresine gelen değerin var olup olmadığını nasıl kontrol ettirebilirim. Umarım sorunum anlaşılmıştır. Teşekkürler

    c# 1 ay önce 243 Görüntüleme

( 4 ) Cevap

  1. sahmeran
    -2
    190
    30.10.2019 11:12:00

    Selamlar,

    Generic listende bir nesnenin, bir elamanın var olup olmadığını kontrol etmek için Linq dan faydalanabilirsin;

    Aşağıdaki kod sayesinde, myList isimli ve nesne tutan listende, naam property sine göre arama yapabilirsin. Yada öğrenci Id gibi bir property ekleyip de arama yapabilirsin;

    Any, list inde bir verinin olup olmadığına göre, veya belirlediğin koşulları karşılayıp karşılamadığına göre true yada false döner.

    public bool Exist(T item)
    {
       return myList.Any(p => p.naam==item.naam);
    }
    
  2. Insyder
    0
    891
    30.10.2019 21:42:00

    Merhaba cevabınız için teşekkür ederim. Ancak kodu yazdığım anda hata veriyor. Şöyle; textboxın içerisine bir değer yazdıktan sonra kaydet tusuna basıyorum ve aşağıdaki kod çalışıyor.

    enter image description here

    Stapel clasının içerisinde ki Toevoegen metodu gelen değeri myListe kaydediyor.

    enter image description here

    Sorun şurada; ana formda bulunan textboxa bir isim yazıp kaydedip daha sonra aynı ismi aratmak istediğimde şu metod çalışıyor

    private void button5_Click(object sender, EventArgs e)
        {
    
            string naam = textBox1.Text;
            bool son = StudentenList.Exist(new Student(naam));
    
          // MessageBox.Show( StudentenList.Exist(false));
    
        }
    

    Bu metod ise Diğer class içerisindeki Exist adlı metoda götürüyor bizi

    public bool Exist(T item)
        {
            return myList.Any(p => p.naam == item.naam);
        }
    

    Burada hata alıyorum. naam ve p lerin altı kırmızı çıkıyor.

    PROJE DOSYASI

  3. koraydrk
    3
    2174
    31.10.2019 11:31:00

    Aramayı nesne/object i parametre olarak gönderip yapacaksan, aşağıdaki gibi yapman yeterli;

     public bool Exist(T item)
     {
        return myList.Contains(item);
     }
    

    generic-class-list-arama-search

    Kodların tamamı ;

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp3
    {
        public class Stapel<T>
        {
            private List<T> myList = new List<T>();
            public void Ekle(T item)
            {
                myList.Add(item);
            }
    
            public bool Exist(T item)
            {
                return myList.Contains(item);
            }
        }
    
        public class Student
        {
            public string naam { get; set; }
    
            public Student(string naam)
            {
                this.naam = naam;
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Stapel<Student> studentList = new Stapel<Student>();
                Student student1 = new Student("Student1");
                Student student2 = new Student("Student2");
                Student student3 = new Student("Student3");
    
                studentList.Ekle(student1);
                //studentList.Ekle(student2);
                studentList.Ekle(student3);
    
                Console.WriteLine(studentList.Exist(student1));
                Console.WriteLine(studentList.Exist(student2));
    
                Console.ReadLine();
            }
        }
    }
    
  4. Insyder
    0
    891
    1.11.2019 17:07:00

    Bu metod "var" yazdırırken diğer metodda aynı kodlar yazmasına rağmen "yok" döndürmekte.

    private void button1_Click(object sender, EventArgs e)
        {
    
            Student student1 = new Student(textBox1.Text);
            StudentenList.Toevoegen(student1);
            bool varmi = StudentenList.Exist(student1);
            if (varmi == true)
                MessageBox.Show("var");
            else
                MessageBox.Show("yok");
    
            listBox1.Items.Add(textBox1.Text);
    
        }
    

    Yok döndüren ara tusunun metodu

    private void button5_Click(object sender, EventArgs e)
        {
            Student student1 = new Student(textBox1.Text);
            bool varmi = StudentenList.Exist(student1);
            if (varmi == true)
                MessageBox.Show("var");
    
            else
                MessageBox.Show("yok");
        }
    
    • Fethidgn yok döndürür çünkü ikinci metodda yeni bir nesne oluşturuyorsun, exist metoduna nesne yerine, string gönderip, bu stringi içeren bir nesne listede varmı diye bir arama yapmalısın

    • Yorum Ekleyin

Cevabınız