بیان ضمنی نوع متغیر و انواع بی نام

با سلام خدمت کاربران عزیز سایت میزفا ، با یکی دیگر از جلسات آموزشی طراحی سایت با ASP.NET Core در خدمت شما هستم.  در این مقاله به بررسی بیان ضمنی نوع متغیر و انواع بی نام می پردازیم با ما همراه شوید.

بیان ضمنی نوع متغیر و انواع بی نام

همانطور که در کد زیر مشاهده می کنید از نوع داده var به جای  [ ]string استفاده نموده ایم زمانی که از var به جای نوع داده استفاده می کنیم کامپایلر خودش به صورت خودکار نوع داده را تشخیص می دهد.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using LearnCSharp.Models;

namespace LearnCSharp.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Sample1()
        {
            var names = new[] { "Kayak", "Lifejacket", "Soccer ball" };
            ViewData["Products"]= names;
            return View();
        }
    }
}

نکته : در کد بالا برای ارسال اطلاعات از Controller به View از شی ViewData استفاده نموده ایم ، ViewData شبیه به ViewBag است و برای انتقال اطلاعات از کنترلر به View از آن استفاده می شود.

کد بالا به این معنی نیست که متغیر names دارای نوعی نیست معنی آن این است که کامپایلر نوع names را خودش تشخیص می‌دهد ، پس به این صورت نوع names که یک آرایه از نوع string هست توسط کامپایلر به صورت خودکار تشخیص داده میشود. حالا یک View برای اکشن متد Sample1 ایجاد کنید و کدهای زیر در آن بنویسید. در کد زیر با استفاده از حلقه foreach اعضای شی ViewData[“Products”] را پیمایش کرده و آنها را در خروجی چاپ می‌کنیم.

@{
Layout = null;
}

<ul>
@foreach (var item in ViewData["Products"] as string[])
{
    <li>
       @item
   </li>
}
</ul>

اجرای برنامه خروجی زیر را در پی خواهد داشت.

Kayak

Lifejack

Soccer ball

کاربرد انواع بی نام

ترکیب روش مقداردهی آغازین و انواع بی نام امکان ایجاد اشیائی را برای انتقال اطلاعات بین کنترلر و‌نما بدون نیاز به کلاس ویژه ای فراهم می‌کند . کد زیر مثالی از این روش را نشان می‌دهد.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using LearnCSharp.Models;

namespace LearnCSharp.Controllers
{
    public class HomeController : Controller
    { 
        public IActionResult Sample2()
        {
            var products = new[]
            {
                new {Name="Kayak",Price=275M},
                new {Name="Lifejacket",Price=48.95M},
                new {Name="Soccer ball",Price=19.50M},
                new {Name="Corner flag",Price=34.9M},
            };
            ViewData["Products"] = products.Select(p => p.Name);
            return View();
        }
    }
}

در کد بالا هر یک از اشیاء آرایه ی products نوعی بی نام هستند ، این به معنی آن است که نوع درست آنها به صورت خودکار توسط کامپایلر تشخیص داده خواهد شد . حالا یک View برای اکشن متد Sample2 ایجاد کنید و کدهای زیر را در آن بنویسید :

@{
Layout = null;
}

<ul>
@foreach (var item in ViewData["Products"] as IEnumerable<string>)
{
    <li>
       @item
   </li>
}
</ul>

اجرای برنامه منجر به خروجی زیر می شود:

Kayak
Lifejack
Soccer ball
Corner flag

کامپایلر #c بر پایه ی نام ها و انواع پارامتر ها ، کلاس مورد نیاز را خودش ایجاد می‌کند . دو‌ شیء بی نامی که دارای خصوصیاتی با اسامی یکسان باشند ، به یک کلاس نسبت داده خواهند شد. به همین دلیل همه اشیاء آرایه‌ی products به کلاس واحدی که به صورت خودکار ایجاد خواهد شد ، نسبت داده خواهند شد (دارای خاصیت های هم نام هستند)
توجه کنید که در این مورد ،  از آنجا که کلاس و نوع دربرگیرنده این خاصیت ها در زمان کامپایل ایجاد می‌شود ، چاره ای جز استفاده از var نبوده است .

برای نمایش این موضوع ، کد بالا را طوری تغییر داده ایم که به جای مقادیر خاصیت Name ، انواع ایجاد شده را در خروجی نمایش دهد.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using LearnCSharp.Models;

namespace LearnCSharp.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Sample3()
        {
            var products = new[]
            {
                new {Name="Kayak",Price=275M},
                new {Name="Lifejacket",Price=48.95M},
                new {Name="Soccer ball",Price=19.50M},
                new {Name="Corner flag",Price=34.9M},
            };
            ViewData["GetType"] = products.Select(p=>p.GetType().Name);
            return View();
        }
    }
}

توجه : در کد بالا با استفاده از متد GetType()  انواع ایجاد شده گرفته می شود حالا یک View برای اکشن متد Sample3 ایجاد کنید و کدهای زیر را در آن بنویسید.

@{
Layout = null;
}

<ul>
@foreach (var item in ViewData["GetType"] as IEnumerable<string>)
{
    <li>
       @item
   </li>
}
</ul>

اجرای برنامه نشان می دهد که همه اشیاء داخل آرایه دارای نوع یکسانی شده اند (تعیین شده توسط کامپایلر) . خروجی کد به صورت زیر خواهد بود.

    <>f__AnonymousType0`2
    <>f__AnonymousType0`2
    <>f__AnonymousType0`2
    <>f__AnonymousType0`2

به پایان این جلسه آموزشی رسیدیم امیدوارم که از این جلسه آموزشی لذت برده باشید .

منبع




دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *