
نوع بینام یعنی یک شیء بسازی بدون اینکه کلاس براش تعریف کنی.
یعنی بهجای این:
class Person { public string Name { get; set; } public int Age { get; set; } }
مینویسیم :
var person = new { Name = "Ali", Age = 30 };
کلاسی وجود نداره
اسم نوع رو خود کامپایلر پشتصحنه میسازه
فقط همونجا قابل استفاده است
1️⃣ فقط با var ساخته میشه
نمیتونی اینطوری بنویسی:
Person p = new { Name = "Ali", Age = 30 }; // ❌
باید:
var p = new { Name = "Ali", Age = 30 }; // ✅
2️⃣ پراپرتیها Read-Only هستن
var user = new { Name = "Sara", Age = 25 }; user.Age = 30; // ❌ خطای کامپایل
چون:
فقط getter دارن
setter ندارن
3️ فقط در همان Scope معتبرند
Anonymous Type رو:
نمیتونی ریترن کنی (مستقیم)
نمیتونی پارامتر متد کنی
نمیتونی فیلد کلاس کنی
مثلاً این اشتباهه:
public ??? GetUser() { return new { Name = "Ali", Age = 30 }; }
🔹 کاربرد اصلی: LINQ
بیشترین استفاده از Anonymous Type توی LINQ هست 👇
var result = people .Where(p => p.Age > 18) .Select(p => new { p.Name, p.Age });
اینجا:
نمیخوای کلاس جدید بسازی
فقط خروجی موقت لازم داری
کدت خیلی تمیزتر میشه
🔹 مقایسه Anonymous Type ها
دو Anonymous Type فقط وقتی برابرند که:
ترتیب پراپرتیها
اسم پراپرتیها
نوع پراپرتیها
دقیقاً یکسان باشه:
var a = new { Name = "Ali", Age = 30 }; var b = new { Name = "Reza", Age = 40 }; bool equal = a.GetType() == b.GetType(); // ✅ true
اما این:
var c = new { Age = 30, Name = "Ali" }; a.GetType() == c.GetType(); // ❌ false (ترتیب فرق دارد)
🔹 محدودیتهای مهم
❌ نمیتونی ازش ارثبری کنی
❌ نمیتونی اینترفیس پیادهسازی کنی
❌ نمیتونی public کنی
❌ برای دادههای ماندگار مناسب نیست
🔹 چه زمانی استفاده کنیم؟
✅ وقتی داده موقتیه
✅ خروجی LINQ
✅ ساخت ViewModel موقت
✅ کاهش کلاسهای اضافه
❌ وقتی داده قراره بین لایهها جابهجا بشه
❌ وقتی API یا متد عمومی داری
Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com