C# - Anonymous Type

islomAli99 - Oct 2 - - Dev Community

C# dasturlash tilida Anonymous Type (Nomlanmagan tur) — bu shunday ma'lumot turi bo‘lib, uni yaratishda ma'lumotning aniq nomini berish shart emas. Bu tur juda sodda obyektlarni tezkor yaratishda qo‘l keladi, masalan, bir nechta qiymatlar bilan ishlaganda. Anonymous turdan foydalanilganda, Visual Studio kompilatori avtomatik ravishda turini aniqlaydi va obyektni yaratadi.

Anonymous turdan foydalanishning asosiy afzalligi — agar obyekt faqat vaqtinchalik ma'lumotlarni saqlash uchun kerak bo‘lsa va uni turini aniqlash ortiqcha bo‘lsa, shunda foydali bo‘ladi.

Anonymous Type yaratish
Anonymous Type ni yaratish uchun new operatoridan foydalaniladi va qiymat berish jarayonida tur avtomatik aniqlanadi. Quyidagi misolga e’tibor bering:

var student = new { Name = "Ali", Age = 21 };
Console.WriteLine($"Ismi: {student.Name}, Yoshi: {student.Age}");

Enter fullscreen mode Exit fullscreen mode

Bu yerda student obyektining turi anonymous bo‘lib, u Name va Age nomli xususiyatlarga ega. var kalit so‘zi yordamida ma'lumot turi avtomatik aniqlanadi.

Muhim jihatlari:

  1. Anonymous Type immutable (o‘zgarmas) hisoblanadi, ya'ni uni yaratgandan keyin uning xususiyatlarini o‘zgartirib bo‘lmaydi.

Misol:

var car = new { Model = "BMW", Year = 2022 };
// car.Model = "Audi";  // Bu yerda xato bo'ladi, chunki anonymous type o'zgartirib bo'lmaydi.
Enter fullscreen mode Exit fullscreen mode
  1. Anonymous Type faqat lokal darajada qo‘llaniladi, ya'ni u faqat bitta metod yoki blok ichida ishlatiladi. Uni metoddan tashqariga chiqarib bo‘lmaydi.

Qo‘shimcha misol:
Quyidagi misolda turli xil qiymatlar bilan bir nechta anonymous tur yaratiladi:

var product = new { Name = "Laptop", Price = 1500.50 };
var customer = new { FirstName = "Javlon", LastName = "Sobirov", Age = 30 };

Console.WriteLine($"Mahsulot: {product.Name}, Narxi: ${product.Price}");
Console.WriteLine($"Mijoz: {customer.FirstName} {customer.LastName}, Yoshi: {customer.Age}");

Enter fullscreen mode Exit fullscreen mode

Natijada, ikki xil anonymous obyekt yaratildi: product va customer. Har biri o‘ziga xos xususiyatlarga ega.

Anonymous Type va LINQ

Anonymous turlar asosan LINQ bilan juda ko‘p ishlatiladi, chunki LINQda tezkor ravishda ma'lumotlarni filtrlash yoki guruhlash jarayonida ma'lumotlarni qayta ishlashda tur aniqlash talab etilmaydi.

Misol:

var students = new[]
{
    new { Name = "Ali", Age = 21 },
    new { Name = "Zafar", Age = 19 },
    new { Name = "Nodir", Age = 22 }
};

var youngStudents = from student in students
                    where student.Age < 22
                    select new { student.Name, student.Age };

foreach (var student in youngStudents)
{
    Console.WriteLine($"Ismi: {student.Name}, Yoshi: {student.Age}");
}

Enter fullscreen mode Exit fullscreen mode

Bu misolda, youngStudents anonymous turdagi kolleksiya bo‘lib, unda faqat yoshi 22 dan kichik bo‘lgan talabalar tanlab olinadi.

Xulosa:

  • Anonymous Type — shaxsiy obyektlar yaratishda oson va qulay.
  • U o‘zgaruvchan emas, ya'ni obyekt xususiyatlarini o‘zgartirib bo‘lmaydi.
  • Faoliyat ko‘rsatuvchi hududda (scope) ishlatiladi va tashqariga chiqmaydi.
  • Asosan, LINQ kabi joylarda foydalanish uchun juda qulay.

1. Anonymous Type ning foydasi:

Anonymous Type asosan ma'lum bir vaziyatlarda ishlatiladi:

  • Ma'lumotlarni vaqtincha saqlash kerak bo‘lganda.
  • Mavjud tiplarni yaratishga hojat bo‘lmagan holatlarda.
  • LINQ yoki querylarda tezkor, bir martalik ishlov berish uchun.

2. Anonymous Type bilan massivlar

Anonymous Type lar massivlarda ishlatilishi ham mumkin. Masalan, bir nechta obyektlarni vaqtincha saqlash uchun massiv yaratamiz:

var books = new[]
{
    new { Title = "C# Fundamentals", Author = "John Doe", Pages = 450 },
    new { Title = "Mastering LINQ", Author = "Jane Doe", Pages = 320 },
    new { Title = "ASP.NET Core", Author = "Mark Smith", Pages = 290 }
};

foreach (var book in books)
{
    Console.WriteLine($"Kitob: {book.Title}, Muallifi: {book.Author}, Sahifalar soni: {book.Pages}");
}

Enter fullscreen mode Exit fullscreen mode

Bu yerda anonymous tipdagi obyektlar books nomli massivda saqlanmoqda. Har bir kitob haqida ma'lumot massiv orqali chop qilinmoqda.

3. Anonymous Type ning cheklovlari

Anonymous Type o‘zining qulayliklari bilan birga ba'zi cheklovlarga ham ega. Ushbu turlar faqat o‘qish (read-only) bo‘lgan xususiyatlarni saqlaydi, ya'ni bir marta yaratilganidan keyin obyektning xususiyatlarini o‘zgartirib bo‘lmaydi.

Misol:

var movie = new { Name = "Inception", Rating = 9.0 };
// movie.Rating = 8.5;  // Xato bo‘ladi: Anonymous tipdagi xususiyat o‘zgartirib bo‘lmaydi.
Console.WriteLine($"Film nomi: {movie.Name}, Reyting: {movie.Rating}");

Enter fullscreen mode Exit fullscreen mode

Bu yerda Rating ni o‘zgartirishga urinish xatoga olib keladi, chunki anonymous tipdagi obyektlar o‘zgarmas (immutable) hisoblanadi.

4. Anonymous Type ichida Anonymous Type

C# da anonymous tiplar boshqa anonymous tiplarni o‘z ichiga olishi mumkin. Bu murakkab ma'lumot strukturalarini yaratishda ishlatiladi.

Misol:

var employee = new
{
    Name = "Ali",
    Position = new { Title = "Dasturchi", Level = 3 },
    Salary = 2500
};

Console.WriteLine($"Ism: {employee.Name}, Lavozim: {employee.Position.Title}, Daraja: {employee.Position.Level}, Oylik: ${employee.Salary}");

Enter fullscreen mode Exit fullscreen mode

Bu yerda employee nomli anonymous tip o‘z ichida yana bir anonymous tip (Position) ni saqlamoqda.

5. LINQ bilan yanada keng foydalanish

Anonymous turlar ko‘pincha LINQ (Language Integrated Query) operatsiyalarida keng foydalaniladi, chunki LINQ orqali ma'lumotlar bilan ishlashda anonymous turlar tezkor va oddiy yechim beradi.

Masalan, katta kolleksiyadan faqat kerakli ma'lumotlarni ajratib olish:

var students = new[]
{
    new { Name = "Ali", Age = 21, Major = "Matematika" },
    new { Name = "Zafar", Age = 22, Major = "Fizika" },
    new { Name = "Nodir", Age = 19, Major = "Informatika" }
};

var filteredStudents = from student in students
                       where student.Age > 20
                       select new { student.Name, student.Major };

foreach (var student in filteredStudents)
{
    Console.WriteLine($"Ism: {student.Name}, Yo‘nalishi: {student.Major}");
}

Enter fullscreen mode Exit fullscreen mode

Bu misolda faqat yoshi 20 dan katta bo‘lgan talabalar ajratib olinadi va anonymous tip orqali faqat kerakli ma'lumotlar tanlanadi.

6. Anonymous Type ning foydalanuvchi definitsiyalari bilan taqqoslanishi

Anonymous tiplar odatda vaqtincha ma'lumotlarni ishlatish uchun kerak bo‘lsa ham, ko‘p hollarda foydalanuvchi definitsiya qilgan klasslarga ehtiyoj seziladi. Anonymous tiplar cheklangan xususiyatlar va o‘zgaruvchanlikka ega bo‘lmaganligi sababli, murakkab strukturalar uchun oddiy klasslardan foydalanish yaxshiroqdir.

Misol: Quyidagi holatda anonymous tip foydali bo‘lmasligi mumkin, chunki ma'lumotlar bilan keyinroq ishlash yoki ularni o‘zgartirish talab qilinishi mumkin:

class Car
{
    public string Model { get; set; }
    public int Year { get; set; }
    public double Price { get; set; }
}

var car = new Car { Model = "Tesla", Year = 2023, Price = 50000 };
car.Price = 48000;  // Bu yerda o'zgartirish mumkin
Console.WriteLine($"Model: {car.Model}, Yil: {car.Year}, Narx: {car.Price}");

Enter fullscreen mode Exit fullscreen mode

Bu holatda Car klassi anonymous tipga qaraganda ko‘proq imkoniyatlarga ega, chunki obyektning qiymatlarini keyinchalik o‘zgartirish mumkin.

Xulosa:

  • Anonymous Type juda qulay vosita bo‘lib, kichik va vaqtinchalik obyektlarni yaratishda ishlatiladi.
  • Anonymous Type immutable hisoblanadi, ya'ni bir marta yaratib bo‘lgandan keyin uning qiymatlarini o‘zgartirib bo‘lmaydi.
  • Asosan, LINQ operatsiyalari va querylar bilan ishlaganda qo‘l keladi.
  • Anonymous turlar murakkab va katta strukturalar uchun emas, faqat vaqtinchalik ma'lumotlarni saqlash uchun mo‘ljallangan.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player