با سلام خدمت کاربران عزیز سایت میزفا ، با یکی دیگر از جلسات آموزشی طراحی سایت با ASP.NET Core در خدمت شما هستم بابت تاخیر به وجود آمده در انتشار مقالات آموزشی عذر خواهی میکنم چون در این مدت در تلاش بودم که دوره آموزش ویدیویی ASP.NET Core2 را برگزار کنم. و در حال حاضر این دوره آموزشی در حال برگزاری است.
بیان ضمنی نوع متغیر و انواع بی نام
همانطور که در کد زیر مشاهده می کنید از نوع داده 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
به پایان این جلسه آموزشی رسیدیم امیدوارم که از این جلسه آموزشی لذت برده باشید .
3 پاسخ
سلام
جالبه برام از وقتی اومدم سایتتون 1 ساعت گذشته و متوجه نشدم خخخخ
هرچی میچرخم اینجا قسمت هایی که دوست دارم پیدا میکنم
سایت خوبی پیدا کردم ولی سر سری سایتتونو دیدم حالا سایتتونو تو گوشیم سیو کردم وقتم ازاد شد میام دوباره میبینم
ممنون
خواهش می کنم.
ممنون به سایت ما هم سر بزنید